#python #list
Вопрос:
Если у меня есть три списка строк, подобных приведенным ниже, как мне выполнить итерацию по списку, чтобы определить, есть ли указанный ингредиент, например «банан», в любом из списков? Мне нужно определить функцию, которая выводит либо true, либо false.
menu = [ ['soup','onion','potato','leek','celery'], ['pizza','bread','tomato','cheese','cheese'], ['banana'] ]
Комментарии:
1. Мне нравится тот, с двойным сыром 🙂
2. Вам нужно сделать это один или несколько раз в одном и том же меню? Вам нужно делать это во многих меню?
Ответ №1:
Вам нужно проверить в каждом из вложенных списков, вы можете использовать any
встроенную передачу выражения генератора
gt;gt;gt; any('banana' in v for v in menu) True
Ответ №2:
Спасибо @ThePyGuy за логику, но вот очень похожий ответ, определенный как функция.
def check_menu(item, menu): if any(item in v for v in menu): return True else: return False print(check_menu('banana',menu)) True print(check_menu('mushroom',menu)) False
Таким образом, вы можете проверить любое меню или пункт в меню, который вы хотите.
Комментарии:
1. Это именно то, что мне было нужно, спасибо, я раньше не сталкивался с «никакими». Если он найдет пункт меню в первом списке, остановится ли он на этом или продолжит перебирать оставшиеся списки?
2. Ваш объект меню представляет собой список списков, эта функция проверит ВЕСЬ объект меню, и если «банан» существует внутри меню, то он вернет значение True, поэтому не имеет значения расположение элемента в списке или в каком списке он находится в списке списков. Если «банана» нет в вашем меню, то он вернет значение False, он повторяется по всему объекту, да.
3. Я должен сообщить о сложности функции и времени ее выполнения для увеличения списков размеров. Так, скажем, например, если в меню 1000 пунктов, а пункт находится в позиции 1, будет ли он продолжать и проверять оставшиеся 999 пунктов, даже если он нашел его в позиции 1?
4. Я думаю, что вы хотите знать, сколько раз что-то будет появляться в вашем меню? Потому что, если у вас в списке меню 1000 пунктов, и все, что делает эта функция, — это поиск, существует ли «банан» В МЕНЮ. Поэтому, если «банан» находится в позиции 1, не имеет значения, повторяется ли он по всему списку, потому что ваша функция вернет значение True. Имеет ли это смысл? Где, как если бы «банан» был найден в индексе 900, он также вернул бы значение True, потому что он СУЩЕСТВУЕТ в меню, не имеет значения, где.
5. Поскольку
any
возвращает логическое значение, ваша функция сводится кdef check_menu(item, menu): return any(item in v for v in menu)
. Нет необходимости в пухе «если/иначе», это излишне.