如何截断列表?

问题描述 投票:0回答:6

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

python list
6个回答
109
投票

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

del l[100:]

这是编写等效内容的更好方式

l.__delitem__(slice(100, None, None))

作为响应,

list
实例相应地截断其内容。


20
投票

您可以使用列表切片:

a = a[0:100]

7
投票

其他提到的

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


3
投票

如果您不介意简单地创建仅包含您想要的元素的列表的新副本,则可以使用切片...但这会使原始列表保持不变。

>>> 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]

2
投票

你可以这样做:

truncated = list[:100]

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]

当然,这不是最佳选择,但我刚刚遇到了需要这个的情况,所以我想我应该在这里分享它(当我看到第一个非无值时,我正在截断列表)。

© www.soinside.com 2019 - 2024. All rights reserved.