我有以下(简化)代码:
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
只能使用一次答案 0 :(得分:4)
使用当前的方法,通过执行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
但是,您可以使用 slice-assignment 修改数据:
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]
答案 1 :(得分:0)
您可以简单地使用列表理解和元组拆包:
a, b, c, d = [l[::3] for l in (a, b, c, d)]