Python: одна строка для условия цикла - PullRequest
0 голосов
/ 24 августа 2018

В приведенном ниже примере я проверяю, находятся ли какие-либо символы в переменной 'characters' в строке 'hello'.

characters = ['a','b','c','d']

if True in [c in 'hello' for c in characters]: print('true')
else: print('false')

Одна строка для цикла создает список логических значений. Мне интересно, есть ли способ не создавать список и передавать все условие сразу после выполнения одного из условий в цикле.

Ответы [ 4 ]

0 голосов
/ 24 августа 2018

попробуйте, объявив список раньше.

characters = ['a','b','c','d']
    a = []
    if True in a = [c in 'hello' for c in characters]: print('true')
    else: print('false')
0 голосов
/ 24 августа 2018

Да, для этого вы можете использовать встроенную функцию any.

if any(c in 'hello' for c in characters): print('true')
0 голосов
/ 24 августа 2018

Вы можете использовать пересечение set, чтобы получить пересекающиеся символы обоих текстов.Если у вас есть, они были в нем, если пересечение- set пусто, ни одного не было в нем:

characters = set("abcd")  # create a set of the chars you look for
text = "hello"
charInText = characters & set(text) # any element in both sets? (intersection)
print ( 'true' if charInText != set() else 'false')  # intersection empty?

text = "apple"
charInText = characters & set(text) 
print ( 'true' if charInText != set() else 'false') 

Вывод:

false # abcd + привет true # abcd+ яблоко

0 голосов
/ 24 августа 2018

Вы можете использовать any с выражением генератора.Это будет принимать значения от генератора по одному до тех пор, пока генератор не будет исчерпан или одно из значений будет верным.

Выражение генератора будет вычислять значения только по мере необходимости, а не все сразу, как понимание списка.

if any(c in 'hello' for c in characters):
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...