python - 如何从这两个列表列表中删除出现在两个列表列表中的可能列表?

标签 python python-3.x list arraylist typeerror

这是两个列表,它们都具有相同数量的元素:

list1 = [['23', '30', 'pm'], ['01', '00', 'am'], ['1', '00', 'am'], ['1', '00', 'pm'], ['1', '', 'pm'], ['5', '', 'pm']]

list2 = [['23', '30', 'pm'], ['01', '00', 'am'], ['01', '00', 'am'], ['01', '00', 'pm'], ['01', '00', 'pm'], ['05', '00', 'pm']]

我试试这个:

list1 = list(list1 - list2)
list2 = list(list2 - list1)

print(repr(list1))
print(repr(list2))

但是我在尝试减去两个列表中相同的元素时得到了这个错误

TypeError: unsupported operand type(s) for -: 'list' and 'list'

我需要这样的列表,也就是说,在每个列表中只有那些不同的元素:

list1 = [['1', '00', 'am'], ['1', '00', 'pm'], ['1', '', 'pm'], ['5', '', 'pm']]

list2 = [['01', '00', 'am'], ['01', '00', 'pm'], ['01', '00', 'pm'], ['05', '00', 'pm']]

我怎样才能做到这一点? (如果可能而不使用额外的库,尽管如果没有其他方法我使用它们也没有问题)

最佳答案

您应该使用 zip 并行迭代列表,并使用另一个 zip 将输出分隔回两个列表:

l1,l2 = map(list, zip(*((a,b) for a,b in zip(list1, list2) if a!=b)))

输出:

# l1
[['1', '00', 'am'], ['1', '00', 'pm'], ['1', '', 'pm'], ['5', '', 'pm']]

# l2
[['01', '00', 'am'], ['01', '00', 'pm'], ['01', '00', 'pm'], ['05', '00', 'pm']]

关于python - 如何从这两个列表列表中删除出现在两个列表列表中的可能列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73439708/

相关文章:

python - 可以计算一个列表中多个字符串的匹配次数吗?

python - 迄今为止的 Django 模板标签 ISO

python - 保存为 PDF 时 Web 抓取 FileNotFoundError

python - 选择排序算法Python

python - 在 Python 中的 Try and Except 中的 "or"语句中使用 "if"

python - 直接打印 `float32`和在Python中使用 `format()`函数的区别

c# - 我怎样才能以另一种形式访问我的列表?

python - 使用 Displacy (Python) 可视化依赖解析

python - 如何在Python中使用转义字符?

Python:使用日期时间格式进行 numpy 重新排列的 SpatiaLite 表?