我有一个简单的脚本,它包含任意数量的列表,包含任意数量的项目。我需要迭代这些列表并显示出现在多个列表中的值,这是我到目前为止所拥有的:
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循环,是否有人可以解释我做错了什么?
答案 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))