Python字符串比较问题

时间:2011-10-08 16:51:34

标签: python list compare substring

我有一些看起来像这样的代码:

    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

最好的写作方式是什么?

4 个答案:

答案 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将以更快的方式使用循环。