Подтвердить что ты не робот

Как урезать список?

Если у меня есть список и вы хотите усечь его, чтобы его было не более 100 элементов, как это сделать?

4b9b3361

Ответ 1

Чтобы изменить список на месте (а не сделать более короткую копию списка), используйте:

del l[100:]

Ответ 2

Вы можете использовать нарезку списка:

a = a[0:100]

Ответ 3

Другие упомянутые items[:100] дают вам новый список, содержащий первые 100 элементов items. Если вы хотите изменить список на месте, либо используйте items[:] = items[:100] (назначение slice), либо while len(items) > 100: items.pop() используйте del items[100:], как было предложено Ned Batchelder.

Ответ 4

Вы можете использовать нарезку, если не возражаете просто создать новую копию списка, который содержит только те элементы, которые вы хотите... однако это оставляет исходный список немодифицированным.

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

Вы можете сделать что-то вроде:

truncated = list[:100]

Ответ 6

Правильный ответ, конечно:

>>> 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).