在下面的示例中,我正在测试在字符串“ hello”中是否找到了变量“ characters”中的任何字符。
characters = ['a','b','c','d']
if True in [c in 'hello' for c in characters]: print('true')
else: print('false')
单行for循环创建布尔值列表。我想知道是否有任何方法可以不创建列表,而是在循环中的条件之一通过后通过整个条件。
答案 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')