【问题标题】:Python: Print each match just one time with if statementPython:使用 if 语句只打印一次每个匹配项
【发布时间】:2017-12-31 13:19:59
【问题描述】:

我正在尝试检查其他列表中是否存在一个字符串列表,它可能存在不止一次,所以当我打印结果时,结果中出现了 1 次以上,我希望它打印每个出现一次时间:

这是我迄今为止一直在做的事情:

    for i in range (0, len(spec)):
        if spec[i] in my_list:
            print ("R7:You mean:",spec[i])

spec 是一个字符串列表,它试图测试每个字符串是否存在于其他列表 (my_list) 中,字符串可能在 my_list 中重复(一个字符串可能存在多次)

输出得到:

R7:You mean: manège
R7:You mean: mangée
R7:You mean: manège
R7:You mean: mangée
R7:You mean: manège
R7:You mean: mangée
R7:You mean: manège
R7:You mean: mangée
R7:You mean: manège
R7:You mean: mangée
R7:You mean: manège
R7:You mean: mangée

预期的输出:

R7:You mean: manège
R7:You mean: mangée

我错过了一些我不知道它是什么的东西!

【问题讨论】:

  • Lresult 是什么?
  • 只需在你的 for 循环中使用break,它将在第一次出现时停止:)
  • 当您说“它可能存在不止一次”时,您的意思是字符串可以在specmy_list 中重复吗?
  • 每次我尝试用 L 中的特殊字符(即列表)替换一个字符以查看它是否存在于 my_list 中,认为字符串可以在 my_list @johnGordon 中重复
  • @noamgot L 是一个带有特殊字符的列表,结果是输入

标签: python python-3.x list if-statement find-occurrences


【解决方案1】:

您可以使用集合推导而不是列表推导:

spec_unique = {result[:i]+s+result[i+1:]for i in range(len(result)) for s in L if s!=result[i]}
for s in spec_unique:
    if s in my_list:
        print ("R7:You mean:", s)

【讨论】:

    【解决方案2】:

    12 行 print 语句表示 print 语句运行了 12 次,因为这是唯一一个馈送到标准输出的 print 语句,并且该语句没有嵌套在额外的循环中。

    这意味着len(spec) >= 12。我认为spec 中有 2 个独特元素的 5 个重复项。

    试试:

    uniq_spec = set(spec)
    for item in uniq_spec:
        if item in my_list:
            print("R7:You mean:", item)
    

    参见示例:

    if __name__ == '__main__':
        str_list = ["words", "many", "many", "words"]
        word_list = ["mana", "many", "word", "words", "words", "again"]
    
        for item in set(str_list):
            if item in word_list:
                print(item)
    
        input()
    

    【讨论】:

    • print实际上有超过12行,我实际上试过但没有运气,我认为my_list中存在重复
    • @Ran 不会产生相同的输出。请参阅新示例,我的两个列表中都有重复项,但结果不同。可能是您的 for 循环 运行了 6 次以上。
    • 你说的循环问题,我没注意,我的错:/