Python 3:用于循环比较列表中的字符串

时间:2017-11-10 13:05:11

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

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

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循环,是否有人可以解释我做错了什么?

1 个答案:

答案 0 :(得分:0)

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

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))