Python 迭代循环

Python iterative loop

我正在尝试遍历搜索列表,我已经像在 C 中那样编写了它,但我想重新编写更多 pythonic。

我一直在尝试 enumerate 但我似乎无法让它工作,它正在搜索数据行以查找保存在称为字符串的数组中的关键字,有人可以显示我或请解释正确的 python 语法。

谢谢

for line in f:
    jd = json.loads(line)
    N=0
    while N<=(len(strings)-1):
        if findWholeWord(strings[N])(line) != None:
            print (jd['user_id'], jd['text'])
            break
        N=N+1

这里好像没必要用enumerate。直接遍历 strings 即可:

for s in strings:
    if findWholeWord(s)(line) != None:
        print (jd['user_id'], jd['text'])
        break

如果你还需要索引变量n,那么使用enumerate:

for n, s in enumerate(strings):
    if findWholeWord(s)(line) != None:
        # do something with n here?
        print (jd['user_id'], jd['text'])
        break

但是既然你在第一场比赛之后 break,你可能也可以使用 any 内置函数:

if any(findWholeWord(s)(line) != None for s in strings):
    jd = json.loads(line)
    print (jd['user_id'], jd['text'])

此外,正如 中所指出的,您可以通过将 stringsline 转换为 set 单词和然后只需使用 in 运算符来检查一组中的某个单词是否在另一组中。但是,如果不知道 findWholeWord 到底在做什么,就很难说清楚。

将字符串设为集合而不是数组(为了性能,不会改变功能)

strings = set(strings)

我不知道 findWholeWord(strings[N])(line) 的用途。但我猜是这样的:

jd = json.loads(s)
## json.loads needs to be used instead json.load since 's' will be a STRING

if any(w in strings for w in tokenize(line)):
    print (jd['user_id'], jd['text'])

我猜 findWholeWords 从行中获取整个单词并根据您的字符串集检查它们。如果是这样,您可以使用适当的分词器(查看 NLTK)或只使用:

def tokenize(line):
  return line.split(' ')