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'])
此外,正如 中所指出的,您可以通过将 strings
或 line
转换为 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(' ')
我正在尝试遍历搜索列表,我已经像在 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'])
此外,正如 strings
或 line
转换为 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(' ')