Удалить элементы из списков, код оставляет только один - PullRequest
0 голосов
/ 19 февраля 2020

Я работаю над началом python упражнения со строками и методами. (Я знаю, что есть некоторые дополнительные операторы печати и комментарии.) Цель состоит в том, чтобы вернуть все остальные элементы из списка. Итак, для первого примера цель состоит в том, чтобы вернуться - # Должно быть ['a', 'c', 'e', ​​'g']

Я борюсь, потому что не могу понять почему мой код не удалит «b» из списка. Что мне не хватает? .

Я рассмотрел следующие конкретные вопросы c StackOverflow. (Плюс другие)

def skip_elements(elements):
    L_elements = len(elements)
    for x in elements:
        print("This is L_elements: " , L_elements)
        #print(x)
        if (L_elements % 2 == 0):
          elements.pop((L_elements-1))
          print(elements)
        if (L_elements == 2):
          print("This is L_elements: " , L_elements, "Should equal 2")        
        L_elements = L_elements - 1
    return elements

print(skip_elements(["a", "b", "c", "d", "e", "f", "g"])) # Should be ['a', 'c', 'e', 'g']
print(skip_elements(['Orange', 'Pineapple', 'Strawberry', 'Kiwi', 'Peach'])) # Should be ['Orange', 'Strawberry', 'Peach']
print(skip_elements([])) # Should be []

1 Ответ

2 голосов
/ 19 февраля 2020

Если вы посмотрите на отладочный вывод вашей программы, вы увидите, что ваш l oop не получает L_elements полностью до 1, как должно. Это потому, что вы сокращаете elements в l oop, и поэтому l oop (for x in elements) выполняется не так часто, как вы ожидаете. Если вы измените for x in elements на for i in range(L_elements), он будет работать как положено.

Гораздо проще написать это в виде списка:

def skip_elements(elements):
    return [e for i, e in enumerate(elements) if i % 2 == 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...