存储值“if any(”search

时间:2015-05-27 21:32:05

标签: python python-2.7

我正在尝试存储word的值,有没有办法做到这一点?

if any(word in currentFile for word in otherFile):

4 个答案:

答案 0 :(得分:2)

如果您想要自己的话,请不要使用any

words = [word for word in otherFile if word in currentFile]

然后你可以直接进行真值测试(因为空列表是假的):

if words:
    # do stuff

还可以访问匹配的单词:

print words

编辑:如果您只想要第一个匹配字,您也可以这样做:

word = next((word for word in otherFile if word in currentFile), None)
if word:
    # do stuff with word

答案 1 :(得分:1)

稍作跟进: 你应该在这里考虑any()函数的输入是什么。输入是一个发电机。所以让我们分解一下:

  • word in currentFile是布尔表达式 - 输出值为True或False
  • for word in otherFileotherFile
  • 执行迭代

因此any()参数的输出实际上是布尔值的生成器。您只需执行[word in currentFile for word in otherFile]即可查看。请注意,括号表示将创建一个列表,同时计算所有值。生成器在功能上的工作方式相同(如果你所做的是对所有值的单个循环),但在内存方面更好。关键是 - 您向any()提供的内容是布尔值列表。它不了解实际的单词 - 因此它不可能输出一个单词。

没有。你必须编写显式循环:

def find_first(currentFile, otherFile)
    for word in currentFile:
        if word in otherFile:
            return word

如果未找到匹配项,则函数将隐式返回None,这可能由find_first()函数之外的调用者处理。

答案 2 :(得分:0)

您无法直接从any存储此值。我推荐一个for-loop

for word in otherFile:
    if word in currentFile:
        break
else:
    word = None
if word is not None:
    print word, "was found in the current file"

请注意,这只会存储word的第一个相关值。如果您想要word的所有相关值,那么应该这样做:

words = [word for word in otherFile if word in currentFile]
for word in words:
    print word, "was found in the current file"

答案 3 :(得分:0)

您可以从currentFile otherFile获取第一个字段currentFile from itertools import dropwhile word = next(dropwhile(lambda word: word not in currentFile, otherfile)) 来自StopIteration的所有字词不在otherFile然后取dropping一个:

currentFile

如果没有这样的词,则会引发words = [word for word in otherFile if word in currentFile]

您可以使用next <{1}}获取words = list(set(otherFile) & set(currentFile)) 中的{em>所有字词:

words = filter(lambda word: word in currentFile, otherFile)

或者使用list comprehension

{{1}}

或者使用set intersection

{{1}}