python - 从另一个列表中删除列表列表

标签 python python-2.7

我想删除出现在 a 和 b 中的元素(不是所有出现的元素)

a = [[2.0, 3.0], [1.0, 2.0] , [2.0, 3.0]]
b = [[1.0, 4.0], [2.0, 3.0] , [3.0, 4.0]]

预期输出

c = [[1.0, 2.0], [2.0, 3.0], [1.0, 4.0], [3.0, 4.0]]

如果一个点在 a 中出现两次,在 b 中出现两次,那么输出应该包含该点两次

a = [[2.0, 3.0], [1.0, 2.0] , [2.0, 3.0]]
b = [[1.0, 4.0], [2.0, 3.0] , [3.0, 4.0], [2.0, 3.0]]

预期输出

c = [[1.0, 2.0], [2.0, 3.0], [1.0, 4.0], [3.0, 4.0], [2.0, 3.0]]

我试过了

 first_set = set(map(tuple, a))
 secnd_set = set(map(tuple, b))

 first_set.symmetric_difference(secnd_set)

但这考虑了 a 或 b 中的元素本身。

编辑:澄清的第二个例子

最佳答案

如果您首先将每一对转换为元组,如下所示:

a = [tuple(item) for item in a]
b = [tuple(item) for item in b]

然后你可以简单地在两者之间使用集合union:

c = set(a).union(b)

这将为您提供一个集合,其中每对中的一对在其中一个或两个集合中至少出现一次:

>>> c
{(1.0, 2.0), (3.0, 4.0), (2.0, 3.0), (1.0, 4.0)}

如果您希望此行为保持倍数,则只需替换 Counter对于 set,那么您可以使用 .elements() 将它们全部返回到一个集合中

from collections import Counter
a = [[2.0, 3.0], [1.0, 2.0] , [2.0, 3.0]]
b = [[1.0, 4.0], [2.0, 3.0] , [3.0, 4.0], [2.0, 3.0]]
a1 = Counter(map(tuple,a))
b1 = Counter(map(tuple,a))
c = a1 | b1

>>> c
Counter({(2.0, 3.0): 2, (1.0, 2.0): 1, (1.0, 4.0): 1, (3.0, 4.0): 1})
>>> list(c.elements())
[(2.0, 3.0), (2.0, 3.0), (1.0, 2.0), (1.0, 4.0), (3.0, 4.0)]

关于python - 从另一个列表中删除列表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44687678/

相关文章:

python - 如何在 python 中一次迭代 2 行,并在 python 中的第二行中追加一个包含值的列?

python - 如何根据 python 中另一个数组中的关键字查找数组中的字符串?

python - 在 python Flask 应用程序中异步发送欢迎电子邮件

python - django打印模板中的表单错误

python - 在两个 csv 文件中查找匹配项

python - 使 docopt 解析单元测试中包含空格的参数

python - subprocess.Popen 和执行 ssh 命令出现问题

python - 将列表附加到字典

python - 从空 pickle 文件中解泡 Python 字典时出现 EOFerror

python - Kivy - 在 ModalView 中按下按钮后更改屏幕