我有一些看起来像这样的代码:
valid = set()
for string in substrings:
for line in dictionary_words:
if string in line:
valid.add(string)
f.writelines(sorted(valid))
dictionary_words和子字符串目前都是列表。
在任何substring
内找到dictionary_words
之后,它应该继续前进到下一个substring
。
最好的写作方式是什么?
答案 0 :(得分:2)
valid = set()
for string in substrings:
for line in dictionary_words:
if string in line:
valid.add(string)
break
f.writelines(sorted(valid))
@ F.C。:如果使用continue
而不是break
,它将运行内部for循环的下一次迭代。
答案 1 :(得分:1)
为什么不试试这个 -
valid = set()
for string in substrings:
if dictionary_words.has_key(string):
valid.add(string)
f.writelines(sorted(valid))
主for循环中不需要额外的for循环。这个has_key
解决了您转到string
不在dictionary_word
的下一个子字符串的问题。
希望这会有所帮助...
答案 2 :(得分:1)
以下(未经测试的代码)应与您的循环等效:
valid = set(s for s in substrings for ln in dictionary_words if s in ln)
在Python 3.0中,您可以使用集合理解:
valid = {s for s in substrings for ln in dictionary_words if s in ln}
效率稍高:
valid = set(s for s in substrings if any(s in ln for ln in dictionary_words))
答案 3 :(得分:0)
[valid.add(my_string) for my_string in substrings for line in dictionary_words if my_string in line]
f.writelines(sorted(valid))
使用List Comprehensions将以更快的方式使用循环。