【发布时间】:2015-05-05 17:09:57
【问题描述】:
我有一个这样的元组列表:
z = [(408, 2, 5), (408, 2, 2), (181, 2, 2), (181, 2, 5), (907, 2, 6), (907, 2, 1), (276, 2, 5), (276, 2, 2), (100, 2, 1), (100, 2, 6), (408, 3, 5), (408, 3, 2), (181, 3, 2), (181, 3, 5), (907, 3, 6), (907, 3, 1), (276, 3, 5), (276, 3, 2), (100, 3, 6), (100, 3, 1), (907, 10, 6), (907, 10, 1), (100, 10, 1), (100, 10, 6), (907, 11, 6), (907, 11, 1), (100, 11, 6), (100, 11, 1)]
我要做的是将所有元组相互比较,并返回元组中每个元素对于所有其他元组都是唯一的元组。
在上面的列表中,任何元组的第一个元素都可以有值408, 181, 907, 276 or 100
第二个元素的值为2, 3, 10 or 11
和第三个元素值1, 2, 5 or 6。
查询列表的输出将返回四个元组,因为元组的元素 2(实际上是元素 3)最多有四种可能性。示例输出:
[(408, 2, 5), (181, 3, 2), (907, 10, 6), (100, 11, 1)]
我尝试过使用 while 循环并分别遍历列表和元组的每个元素以删除列表的相应元素或创建单独的列表,但这种方法没有考虑所有可能性并且感觉错误:
i = 0
j = 1
try:
while i < len(z):
if z[i][0] == z[j][0] or z[i][1] == z[j][1] or z[i][2] == z[j][2]:
del z[j]
else:
j += 1
i += 1
except:
pass
我也研究过集合,但据我所知,它只会删除元组的重复项。
谢谢。
【问题讨论】:
-
如果
(408, 2, 5)和(408, 2, 2)都出现在原始列表中,为什么(408, 2, 5)在输出中?根据您的描述,它不应该是408和2并不是唯一的。 -
(408, 2, 5)和(408, 2, 2)的第一个元素为408,第二个元素为2,那么(408, 2, 5)如何包含在输出中? -
事实上,进一步查看原始列表,没有一个输出符合标准。