Как удалить первый элемент в списке в списке? - PullRequest
1 голос
/ 05 ноября 2019

Я хотел бы знать, есть ли способ удалить индекс в списке в списке. Например, учитывая [[1,2,3],[4,5,6],[7,8,9]], я хотел бы удалить первый элемент каждого списка, чтобы он стал [[2,3],[5,6],[8,9]]. Я могу сделать цикл for, чтобы медленно удалить их, но мне было интересно, есть ли более эффективный способ сделать это?

Ответы [ 3 ]

1 голос
/ 05 ноября 2019

Вы можете сделать это с помощью итерации по списку, а затем вызвать функцию pop () во внутреннем списке. Это удалит элемент с указанным индексом.

test_list = [[1,2,3],[4,5,6],[7,8,9]]

for i in test_list:
    i.pop(0)

print(test_list)

output: [[2, 3], [5, 6], [8, 9]]

0 голосов
/ 05 ноября 2019

Для маленьких list с, как в вашем примере, делать что-то вроде list.pop(0) можно:

nested = [[1,2,3], [4,5,6], [7,8,9]]
for inner in nested:
    inner.pop(0)  # Remove first element of each inner list

Однако, поскольку list s в основном реализованы как массивы (указателей), удалениеПервый элемент означает, что все остальные элементы должны быть сдвинуты назад на один, что приводит к большому количеству копий (указателей), если ваши list s большие. Кроме того, использование inner[1:] вместо inner.pop(0) не решает проблему, поскольку inner[1:] создает новый list, а не возвращает представление.

Одним из выходов является отображение избыточных элементов в видепоследний элемент вместо первого, так что вы можете вместо этого сделать inner.pop(), который удалит последний элемент. Дальнейшее смещение / копирование не требуется.

Другое решение состоит в переключении структуры данных с list на deque ("двусторонняя очередь"). Это метод popleft(), который эквивалентен pop(0), но быстрый, так как deque s поддерживает быстрое выталкивание с обоих концов:

import collections
nested = [[1,2,3], [4,5,6], [7,8,9]]
nested = [collections.deque(inner) for inner in nested]  # list of deques
for inner in nested:
    inner.popleft()  # Remove first element of each inner list, fast!
0 голосов
/ 05 ноября 2019

Я бы сказал, что у вас есть два варианта.

Вы можете использовать pop():

for item in list:
    item.pop(0)

Или создать новый список:

list2 = [item[1:] for item in list]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...