#python #list #loops #for-loop
Вопрос:
Я пытаюсь удалить спам из заданных вариантов в меню, мой for
цикл не работает.
menu = [
["egg", "bacon"],
["egg", "sausage", "bacon"],
["egg", "spam"],
["egg", "bacon", "spam"],
["egg", "bacon", "sausage", "spam"],
["spam", "bacon", "sausage", "spam"],
["spam", "sausage", "spam", "bacon", "spam", "tomato",
"spam"],
["spam", "egg", "spam", "spam", "bacon", "spam"],
]
for choice in menu:
if "spam" in choice:
remove("spam")
print(choice)
Комментарии:
1. Пожалуйста, обновите свой вопрос с помощью полной обратной трассировки ошибок.
2. «удалить» не определено. Может быть, вы имели в виду
choice.remove("spam")
?3. См. Документацию о методе изменяемой последовательности
remove()
.
Ответ №1:
Как указано @h4z4, remove
не определено. Попробуй
for choice in menu:
if "spam" in choice:
choice.remove("spam")
print(choice)
Однако remove
удаляется только первое вхождение. Чтобы удалить все вхождения, попробуйте:
for choice in menu:
if "spam" in choice:
choice = [item for item in choice if item != "spam"]
print(choice)
Ответ №2:
Чтобы удалить весь «спам» из подсписков, используйте понимание списка:
menu = [
["egg", "bacon"],
["egg", "sausage", "bacon"],
["egg", "spam"],
["egg", "bacon", "spam"],
["egg", "bacon", "sausage", "spam"],
["spam", "bacon", "sausage", "spam"],
["spam", "sausage", "spam", "bacon", "spam", "tomato", "spam"],
["spam", "egg", "spam", "spam", "bacon", "spam"],
]
menu = [[val for val in subl if val != "spam"] for subl in menu]
print(menu)
С принтами:
[['egg', 'bacon'],
['egg', 'sausage', 'bacon'],
['egg'],
['egg', 'bacon'],
['egg', 'bacon', 'sausage'],
['bacon', 'sausage'],
['sausage', 'bacon', 'tomato'],
['egg', 'bacon']]
Ответ №3:
- Как уже указывалось,
remove
это методlist
и должен называться какchoice.remove("spam")
remove
удаляет только первое вхождение элемента
Вот способ сделать это с remove
помощью и count
Код:
menu = [
["egg", "bacon"],
["egg", "sausage", "bacon"],
["egg", "spam"],
["egg", "bacon", "spam"],
["egg", "bacon", "sausage", "spam"],
["spam", "bacon", "sausage", "spam"],
["spam", "sausage", "spam", "bacon", "spam", "tomato",
"spam"],
["spam", "egg", "spam", "spam", "bacon", "spam"],
]
for choice in menu:
c = choice.count('spam') # returns number of occurrences of 'spam' in choice
while c: # to remove spam from choice c times
choice.remove("spam")
c-=1
print(*menu, sep='n')
Выход:
['egg', 'bacon']
['egg', 'sausage', 'bacon']
['egg']
['egg', 'bacon']
['egg', 'bacon', 'sausage']
['bacon', 'sausage']
['sausage', 'bacon', 'tomato']
['egg', 'bacon']
Но я бы предпочел понимание списка