Как узнать, существует ли значение в трех отдельных списках?

#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) . Нет необходимости в пухе «если/иначе», это излишне.