Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何合并两个列表,避免重复?_Python_List - Fatal编程技术网

Python:如何合并两个列表,避免重复?

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_

我有两份清单:

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_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]]