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

时间:2019-05-19 16:37:44

标签: python python-3.x slice

我有以下(简化)代码:

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只能使用一次
  • 仅指定切片一次(或其他任何方式)。

2 个答案:

答案 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)]