Для цикла, не удаляющего все элементы из списка, каково решение? - PullRequest
0 голосов
/ 28 июня 2018

Я знаю, почему этот цикл не удаляет все элементы из списка1 с помощью других ответов на тот же вопрос, мой вопрос здесь заключается в том, что нужно изменить в коде цикла, чтобы удалить все элементы из списка 1.

Вот мой код:

    list1 = [1,'one',2,'two',3,'three']
    for x in list1:
      if x in list1:
        list1.remove(x)
    print(list1)

Заранее спасибо.

Ответы [ 5 ]

0 голосов
/ 29 июня 2018

для удаления значения из существующего списка: сначала возьмем длину списка

list1 = [1,'one',2,'two',3,'three']
for i in range(len(list1)):
    list1.pop()

удалит последний элемент каждый раз, когда выполняется цикл

             OR

вы можете сделать это как

list1 = [1,'one',2,'two',3,'three']
for i in range(len(list1)):
     del list1[0]
0 голосов
/ 28 июня 2018

Причина, по которой вы не можете удалить все элементы, заключается в том, что когда вы делаете in в списке for цикл, он начинает цикл с первым элементом, но когда вы удаляете этот элемент и переходите к следующему элементу, вы фактически перемещаете к третьему элементу, пропустив второй элемент. Позвольте мне взять пример list1 = [1, "one", 2, "two", 3, "three"] На первой итерации Текущий элемент - 1 , и после завершения первой итерации вы удаляете 1 , а текущий элемент - one , а затем переходите к следующему элементу, который на самом деле 2 и вот как вы упускаете возможность удалить один , и то же самое продолжает происходить, и, наконец, у вас остается "one", "two", "three".

Я знаю, что немного сбивает с толку, но, думаю, это помогает.

0 голосов
/ 28 июня 2018

Вы могли бы просто сделать это:

list1 = []

Однако, если вы хотите удалить каждый элемент, то:

while list1!=[]:
    del list1[0]

РЕДАКТИРОВАТЬ: гораздо лучше и быстрее метод, предложенный Янн Вернье:

del list1[:]
0 голосов
/ 28 июня 2018

Если вы хотите удалить все элементы списка, используя цикл, то я думаю, что это один из самых коротких элементов:

while list1:
    del(list1[0]) #Before deletion of all items,always there will be an item at index 0

Также этот трюк может вам помочь!

list1 = [1,'one',2,'two',3,'three']
for i in range(len(list1)):
    del (list1[0]) #Before deletion of all items,always there will be an item at index 0
print(list1)
0 голосов
/ 28 июня 2018

Не меняйте объекты во время их итерации (если только вы не знаете, что делаете).

Возможный обходной путь - итерация копии и изменение исходного объекта:

list1 = [1,'one',2,'two',3,'three']
for x in list1[:]:
  if x in list1:
    list1.remove(x)
print(list1)

Выход:

[]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...