Python:循环条件一行

时间:2018-08-24 19:31:52

标签: python python-3.x loops syntax

在下面的示例中,我正在测试在字符串“ hello”中是否找到了变量“ characters”中的任何字符。

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

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

单行for循环创建布尔值列表。我想知道是否有任何方法可以不创建列表,而是在循环中的条件之一通过后通过整个条件。

4 个答案:

答案 0 :(得分:4)

您可以将any与生成器表达式一起使用。这将一次从生成器获取一个值,直到生成器用尽或其中一个值是真实的为止。

生成器表达式将仅根据需要计算值,而不是像列表理解那样一次计算所有值。

if any(c in 'hello' for c in characters):
    ...

答案 1 :(得分:3)

是的,您可以为此使用内置功能any

if any(c in 'hello' for c in characters): print('true')

答案 2 :(得分:0)

您可以使用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 +苹果

答案 3 :(得分:0)

通过在此之前声明列表来尝试此操作。

characters = ['a','b','c','d']
    a = []
    if True in a = [c in 'hello' for c in characters]: print('true')
    else: print('false')