如果我有一个列表并想截断它使其不超过 100 个项目,我该怎么做?
要就地修改列表(而不是制作列表的较短副本),请使用:
del l[100:]
这是编写等效内容的更好方式
l.__delitem__(slice(100, None, None))
作为响应,
list
实例相应地截断其内容。
您可以使用列表切片:
a = a[0:100]
其他提到的
items[:100]
为您提供了一个新列表,其中包含 items
的前 100 项。如果您想就地修改列表,items[:] = items[:100]
(切片分配)或 while len(items) > 100: items.pop()
del items[100:]
,如 Ned Batchelder 所建议。
如果您不介意简单地创建仅包含您想要的元素的列表的新副本,则可以使用切片...但这会使原始列表保持不变。
>>> 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]
你可以这样做:
truncated = list[:100]
正确答案当然是:
>>> 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]
当然,这不是最佳选择,但我刚刚遇到了需要这个的情况,所以我想我应该在这里分享它(当我看到第一个非无值时,我正在截断列表)。