Ответ 1
Чтобы изменить список на месте (а не сделать более короткую копию списка), используйте:
del l[100:]
Если у меня есть список и вы хотите усечь его, чтобы его было не более 100 элементов, как это сделать?
Чтобы изменить список на месте (а не сделать более короткую копию списка), используйте:
del l[100:]
Вы можете использовать нарезку списка:
a = a[0:100]
Другие упомянутые items[:100]
дают вам новый список, содержащий первые 100 элементов items
. Если вы хотите изменить список на месте, либо используйте используйте items[:] = items[:100]
(назначение slice), либо 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]
Это удаляет отдельные элементы, сокращая список, без копирования.
Таким образом, тупой и yucky ответ (но и правильный) должен был бы итерации вниз. Я просто снижаюсь с 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]
Конечно, это не оптимально, но я просто столкнулся с ситуацией, когда мне это нужно, поэтому я решил поделиться ею здесь (я обрезаю список, когда вижу первое значение, отличное от None).