Python:如何合并两个列表,避免重复?
我有两份清单: ll1=[[17]、[35,6]、[47,58,86]] ll2=[[19]、[75,8]、[17,58,86]] 我如何合并它们,也许在for循环中,创建一个新的列表ll3,并跳过重复的值 预期结果将是: ll3=[[17,19],[35,6,75,8],[47,58,86]]Python:如何合并两个列表,避免重复?,python,list,Python,List,我有两份清单: ll1=[[17]、[35,6]、[47,58,86]] ll2=[[19]、[75,8]、[17,58,86]] 我如何合并它们,也许在for循环中,创建一个新的列表ll3,并跳过重复的值 预期结果将是: ll3=[[17,19],[35,6,75,8],[47,58,86]] 这相当于将两个列表合并在一起,然后删除或删除重复的值。通常-假设生成的子列表中的元素顺序不重要,并且两个列表的长度相同,则可以使用zip和set 对于您似乎正在寻找的内容,我将保留一组以前的值 old_
这相当于将两个列表合并在一起,然后删除或删除重复的值。通常-假设生成的子列表中的元素顺序不重要,并且两个列表的长度相同,则可以使用zip和set
对于您似乎正在寻找的内容,我将保留一组以前的值
old_values = {}
ll3 = []
for list_a, list_b in zip(ll1,ll2):
temp_list = []
for item in list_a:
if item in old_values or item in list_b:
pass
else:
temp_list.append(item)
old_values.add(item)
for item in list_b:
if item in old_values or item in list_a:
pass
else:
temp_list.append(item)
old_values.add(item)
ll3.append(temp_list)
前面的答案似乎不符合您的要求,即列表可以有不同的大小 我的解决方案使用集合交点和并集。注意,我正在使用Python2,将zip_longest更改为izip_longest 这将打印:
[[17, 19], [8, 75, 35, 6], [58, 86, 47]]
如果:
ll1=[[17],[35,6],[47,58,86],[5]]
ll2=[[19],[75,8],[17,58,86]]
返回:
[[17, 19], [8, 75, 35, 6], [58, 86, 47], [5]]
在合并过程中,您试图避免前面列表中的任何值?列表的大小是否始终相同?删除重复的值通常意味着您仍然保留其中一个值,您真的是说第三个示例不应包含58和86?这没有意义,因为你摆脱了58,但你保留了17。这可能是一个好主意,给你的尝试做一个概述。我怀疑可能有更有效的方法来执行您正在执行的某些步骤。如果你给我们一个大局图,我们可以确保我们没有试图解决一个问题。这不会跳过重复值,而是在result@volcano这在问题中并不是很明显,但OP也希望排除之前看到的值,在本例中,第二个17。@brianpck,thnx澄清,修复了thatha,几乎同时使用相同的解决方案考虑使用set.symmetric_difference@PM2Ring我想避免在顺序重要的情况下使用a和b的集合。从OP的前一个问题来看,我很确定子列表中的顺序并不重要。但是,通过对问题的评论来澄清这类问题是一个好主意。你可以切换我的条件以匹配@PatrickHaugh答案。他的有点干净。为什么我会被导入恐怖:无法导入名称zip_?我以前从没想过。使用Python 2.7.11,32-bit@CF84如果您使用的是Python2,请在导入和for循环中将名称更改为izip_longest抱歉,我犯了一个小错误。预期结果必须包括我错误遗漏的58和86。检查我的编辑,再次表示歉意。@CF84我刚刚清理了一点逐位操作:它现在更短了。@CF84好的,幸运的是这是一个简单的修复方法:只需将^
[[17, 19], [8, 75, 35, 6], [58, 86, 47]]
ll1=[[17],[35,6],[47,58,86],[5]]
ll2=[[19],[75,8],[17,58,86]]
[[17, 19], [8, 75, 35, 6], [58, 86, 47], [5]]