【问题标题】:Python 3: For loop comparing strings in listsPython 3:For 循环比较列表中的字符串
【发布时间】:2017-11-10 13:05:11
【问题描述】:

我有一个简单的脚本,它接受任意数量的列表,包含任意数量的项目。我需要遍历这些列表并显示出现在多个列表中的值,这是我目前所拥有的:

def lists(*usrin):

# STRINGS IN MULTIPLE LISTS
repeat_strings = set()
for a, b in itertools.combinations(usrin, 2):
    repeat_strings.update(set(a).intersection(b))
    print(', ' .join(repeat_strings))

作为用户,如果我向函数传递以下参数:

lists(['g', 'gh', 'ghj', 'g'], ['j', 'ju', 'gh', 'gk', 'gn'], ['gn'])

我希望得到:

gn, gh

作为输出,但是我得到:

gh
gh
gn, gh

我不确定前两个“gh”是从哪里来的。

如果我添加另一个列表,则函数调用如下所示:

lists(['g', 'gh', 'ghj', 'g'], ['j', 'ju', 'gh', 'gk', 'gn'], ['gn'], ['g', 'gk'])

我希望得到:

g, gn, gk, gh

而是得到:

gh
gh
g, gh
g, gn, gh
g, gn, gk, gh
g, gn, gk, gh

这让我觉得我误解了我所做的 for 循环,谁能解释我做错了什么?

【问题讨论】:

    标签: arrays python-3.x list for-loop


    【解决方案1】:

    打印语句负责您看到的显示。它为每个循环执行,因此它代表了您的列表的逐步构建。否则,您的算法是正确的。试试这个以避免中间打印:

    def lists(*usrin):
    
        # STRINGS IN MULTIPLE LISTS
        repeat_strings = set()
        for a, b in itertools.combinations(usrin, 2):
            repeat_strings.update(set(a).intersection(b))
        print(', ' .join(repeat_strings))
    

    【讨论】:

    • 我不敢相信我没有注意到这一点.. 有时你只需要另一双眼睛。谢谢!
    • 当遇到问题时,试着向你的泰迪熊/老鼠/笔/同事/任何“愚蠢”到足以迫使你详细解释的人解释它,而且一般在中间解释,你发现问题了:)
    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多