无法弄清楚如何以一种漂亮的方式做到这一点:
我有一个包含 n 个元素的列表, 我想访问列表的每个 m 元素。
例如:[1, 2, 3, 4, 5] 和 m = 2 会给出 [2, 4]
我可以简单地用一个循环来完成,但是没有更“Pythonic”的方式吗?
提前致谢!
编辑:
我好像忘记了什么。 我想,不仅要获取这些值,还要修改它们。 我尝试切片 a[::2] = 3,但它不起作用。 . .
我正在寻找类似的东西
请您参考如下方法:
切片语法为你做这件事:
>>> my_list = range(10)
>>> my_list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> my_list[::2]
[0, 2, 4, 6, 8]
>>> my_list[1::2]
[1, 3, 5, 7, 9]
这是一种包装列表以获得您想要的原始赋值行为的方法,但我不确定我是否会推荐它:
class AssignableSlice(list):
def __setitem__(self, i, v):
if isinstance(i, slice):
for ii in xrange(*i.indices(len(self))):
self[ii] = v
else:
super(AssignableSlice, self).__setitem__(i, v)
a = AssignableSlice(range(10))
print a
a[::2] = 3
print a
a[1::3] = 99
print a
产生:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[3, 1, 3, 3, 3, 5, 3, 7, 3, 9]
[3, 99, 3, 3, 99, 5, 3, 99, 3, 9]
