gpt4 book ai didi

Python - 取每个第 n 个元素(就地)

转载 作者:太空宇宙 更新时间:2023-11-04 09:29:38 27 4
gpt4 key购买 nike

我有以下(简化的)代码:

a = a[::3]
b = b[::3]
c = c[::3]
d = d[::3]

a,b,c,d,其实都是很复杂的表达式,所以我想这样写:

for l in [a, b, c, d]
l = l[::3]

,当然不行。我怎样才能把每个第 n 个元素放在适当的位置?如果要删除每个第 n 个元素,我可以使用 del,但事实并非如此。

本质上,我想:

  • 每个a,b,c,d只使用一次
  • 仅指定一次切片(或其他)。

最佳答案

使用您当前的方法,通过执行 l = l[::3] 您只是重新分配变量,或者换句话说,创建列表的副本,这将留下 a 不变。

让我们看一个例子,通过使用 id 我们可以看到对象的身份在重新分配后是不同的:

for i in [a,b]:
print(id(a)) # 43269876104
print(id(i)) # 43269876104
i = i[::3]
print(id(i)) # 43271280456
break

但是,您可以使用切片分配就地修改数据:

for i in [a,b]:
print(id(a)) # 43269876104
print(id(i)) # 43269876104
i[:] = i[::3]
print(id(i)) # 43269876104
break

所以回到你的情况下你可以这样做:

for i in [a, b, c, d]:
i[:] = i[::3]

这是一个简单的例子:

a = list(range(30))
b = list(range(30))

for i in [a,b]:
i[:] = i[::3]

print(b)
# [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

关于Python - 取每个第 n 个元素(就地),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56209895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com