如何截断列表?

时间:2011-01-29 18:04:49

标签: python list

如果我有一个列表并希望截断它以使它不超过100个项目,我该怎么做?

6 个答案:

答案 0 :(得分:72)

要修改列表(而不是制作列表的较短副本),请使用:

del l[100:]

答案 1 :(得分:13)

您可以使用列表切片:

a = a[0:100]

答案 2 :(得分:6)

提到的items[:100]其他内容为您提供了一个新列表,其中包含items的前100项。如果您想就地修改列表,使用items[:] = items[:100](切片分配)或while len(items) > 100: items.pop() 使用Ned Batchelder建议的del items[100:]

答案 3 :(得分:2)

正确答案当然是:

>>> x = range(10)
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x = x[:5]
>>> x
[0, 1, 2, 3, 4]

但是,重要的是,如果您对100以上的值感兴趣并且无论出于何种原因想要逐个删除它们,您还可以使用 POP()

>>> x = range(10)
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x.pop()
9
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8]

您甚至可以指定要拉出的元素:

>>> x= range(10,20)
>>> x
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> x.pop(3)
13
>>> x.pop()
19
>>> x
[10, 11, 12, 14, 15, 16, 17, 18]
>>> x.pop(-1)
18
[10, 11, 12, 14, 15, 16, 17]

删除单个元素,缩短列表,不复制。

所以,一个迟钝而又令人讨厌的答案(但也是正确的)将是迭代。为了便于阅读,我只是从12下降到8:

>>> x=range(12)
>>> for i in range(len(x), 8, -1):
...     y = x.pop()
...     print "popping x: ", y, ", x=", x
...
popping x:  11 , x= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
popping x:  10 , x= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
popping x:  9 , x= [0, 1, 2, 3, 4, 5, 6, 7, 8]
popping x:  8 , x= [0, 1, 2, 3, 4, 5, 6, 7]

当然,这不是最优的,但我只是碰到了我需要这个的情况所以我想我会在这里分享它(当我看到第一个非-On值时,我正在截断列表)。

答案 4 :(得分:1)

如果你不介意只是简单地创建一个只包含你想要的元素的列表的新副本,你就可以使用切片......但这样就不会修改原始列表。

>>> a = [0,1,2,3,4,5,6,7,8,9]
>>> b = a[0:5]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b
[0, 1, 2, 3, 4]

如果您确实要截断原始列表,只需使用 del

切片删除您不想要的元素
>>> del a[5:]
>>> a
[0, 1, 2, 3, 4]

答案 5 :(得分:0)

您可以执行以下操作:

truncated = list[:100]