【发布时间】:2010-06-16 16:34:28
【问题描述】:
我有几个类似的列表:
a = [1, 2, 3, 4, 5]
b = [4, 6, 5, 9, 2]
c = [4, 7, 9, 1, 2]
我想用一个循环来修剪它们,而不是像下面这样:
a[-2:]
b[-2:]
c[-2:]
我尝试过但对按值传递或按引用传递的基本原理感到困惑,我也研究了其他问题,但没有任何帮助。
谢谢
【问题讨论】:
我有几个类似的列表:
a = [1, 2, 3, 4, 5]
b = [4, 6, 5, 9, 2]
c = [4, 7, 9, 1, 2]
我想用一个循环来修剪它们,而不是像下面这样:
a[-2:]
b[-2:]
c[-2:]
我尝试过但对按值传递或按引用传递的基本原理感到困惑,我也研究了其他问题,但没有任何帮助。
谢谢
【问题讨论】:
for l in [a, b, c]:
del l[-2:]
这会从每个列表中删除最后两个元素。如果您只想删除除最后两个元素之外的所有元素,请执行以下操作:
for l in [a, b, c]:
del l[:-2]
这里无需担心引用; for 循环迭代的列表包含对a、b 和c 的引用,并且每个列表通过删除列表切片就地变异。
【讨论】:
x = [a, b, c]
x = map(lambda lst: lst[-2:], x)
【讨论】:
x 而不是另一个列表中(map 在 Python 3.x 中返回迭代器)。
使用循环从现有列表中删除不需要的项目:
for list in [a, b, c]:
del a[:-2]
或者,使用列表推导式创建仅包含正确项目的新列表:
(a, b, c) = [x[-2:] for x in (a, b, c)]
【讨论】: