Оцените один раз, если строка не в элементе при переборе списка - python 3.x - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу использовать это в операторе if, поэтому было бы полезно, если выходные данные являются выражением типа Болле, но есть ли простой способ найти, если строка не найдена в элементе списка?

, например

string_foo='teen'

list_foo=['one','two','three']

проблема в том, что мне нужен цикл для вывода чего-либо, если строка не найдена в элементе списка, проблема, с которой я сталкиваюсь при этом:

[print('no') if string_foo not in i for i in list_foo]

Это то, что для каждого элемента, где string_foo нет в i, он будет печатать 'no', тогда как я хочу, чтобы он печатал 'no' только один раз, если string_foo не найден внутри элемента в list_foo

Ответы [ 3 ]

0 голосов
/ 07 ноября 2018

Не используйте побочные эффекты от понимания списка

Понятия списков предназначены для создания новых списков, а не для их побочных эффектов. print возвращает None, поэтому вы создаете и удаляете список значений None. Это расточительно.

any / all + генератор понимания

Одним из решений является использование any с пониманием генератора:

if not any(string_foo in i for i in list_foo):
    print('no')

Или эквивалентно all:

if all(string_foo not in i for i in list_foo):
    print('no')

Написать функцию

У генераторов / выражений генератора есть накладные расходы, которые вы можете счесть дорогостоящими. Обычная функция может быть более эффективной:

def any_in_list(mystr, lst):
    for i in lst:
        if mystr in i:
            return True
    return False

if not any_in_list(string_foo, list_foo):
    print('no')

for / else петля + break

Если вы не хотите писать универсальную функцию, вы можете выполнить репликацию с помощью конструкции for / else с break:

for i in list_foo:
    if string_foo in i:
        break
else:
    print('no')
0 голосов
/ 07 ноября 2018

Это делает то, что вы хотите:

if any(x in i for i in things):
    print("in it")
else:
    print("not in it")

любая функция возвращает true, если какой-либо из элементов списка имеет значение true.

0 голосов
/ 07 ноября 2018

Следующее должно работать. list_foo - это только список строк, поэтому вам не нужно циклически перебирать каждый элемент, вы можете просто проверить, существует ли string_foo в списке или нет.

if string_foo not in item:
  print('no')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...