我是python的新手(使用3.6)并且可以使用一些帮助,我们将非常感激!我一直在尝试使用set()
修复我的问题,但我无法正确解决问题。如果4个第一个元素相等,我试图在长Tuples
中过滤重复的list
。这个列表有600多个像这样的元组。
实施例。 - [(1, 1 , 1, '0x19', '0x19', 'age')] and [(1, 1, 1, '0x19', '-', '-')]
在前4个元素中相等,因此我想从列表中删除[(1, 1, 1, '0x19', '-', '-')]
并将tuple
与'age'保持一致。与[(1, 2, 1, '0x19', '0x11', 'odd')] and [(1, 2, 1, '0x19', '-', '-')]
相同,4个第一个元素相同,所以我想从列表中删除[(1, 2, 1, '0x19', '-', '-')]
并保持“奇数”,但如果tuple
没有重复我仍然希望它留在list
。 Ex [(1, 1, 3, '0x2F', '-', '-')]
和[(1, 2, 0, '0x1637', '-', '-')]
没有重复,所以我仍然需要它们留在新列表中。
前列表:
[(1, 1, 0, '0x1636', '-', '-')]
[(1, 1, 1, '0x19', '0x19', 'age')]
[(1, 1, 1, '0x19', '-', '-')]
[(1, 1, 2, '0x02', '0x02', 'live')]
[(1, 1, 2, '0x02', '-', '-')]
[(1, 1, 3, '0x2F', '-', '-')]
[(1, 2, 0, '0x1637', '-', '-')]
[(1, 2, 1, '0x19', '0x11', 'odd')]
[(1, 2, 1, '0x13', '-', '-')]
[(1, 2, 1, '0x11', '-', '-')]
[(1, 2, 1, '0x05', '-', '-')]
[(1, 2, 2, '0x02', '0x04', 'tree')]
[(1, 2, 2, '0x02', '-', '-')]
[(.....................)]
' - '是我现在的暂时值(我还没有分配任何东西)。
我没有要显示的测试代码,因为我没有真正领导如何做到这一点,但我想set()和for循环/嵌套循环可以用来解决这个问题,但我不知道怎么做。 ..所以我要求一些帮助。
由于
答案 0 :(得分:6)
要做到这一点,我会:
l = [(1, 1, 0, '0x1636', '-', '-'),
(1, 1, 1, '0x19', '0x19', 'age'),
(1, 1, 1, '0x19', '-', '-'),
(1, 1, 2, '0x02', '0x02', 'live'),
(1, 1, 2, '0x02', '-', '-'),
(1, 1, 3, '0x2F', '-', '-'),
(1, 2, 0, '0x1637', '-', '-'),
(1, 2, 1, '0x19', '0x11', 'odd'),
(1, 2, 1, '0x13', '-', '-'),
(1, 2, 1, '0x11', '-', '-'),
(1, 2, 1, '0x05', '-', '-'),
(1, 2, 2, '0x02', '0x04', 'tree'),
(1, 2, 2, '0x02', '-', '-')]
newl = list({tuple(v[:4]):v for v in sorted(l,reverse=True,key = lambda v : all(x == '-' for x in v[4:]))}.values())
print(newl)
结果:
[(1, 1, 0, '0x1636', '-', '-'), (1, 1, 3, '0x2F', '-', '-'), (1, 2, 1, '0x19', '0x11', 'odd'), (1, 2, 2, '0x02', '0x04', 'tree'), (1, 2, 1, '0x13', '-', '-'), (1, 2, 1, '0x11', '-', '-'), (1, 1, 1, '0x19', '0x19', 'age'), (1, 2, 0, '0x1637', '-', '-'), (1, 2, 1, '0x05', '-', '-'), (1, 1, 2, '0x02', '0x02', 'live')]
请注意,如果您希望对列表进行排序,只需将newl = list(
替换为newl = sorted(
即可获得:
[(1, 1, 0, '0x1636', '-', '-'), (1, 1, 1, '0x19', '0x19', 'age'), (1, 1, 2, '0x02', '0x02', 'live'), (1, 1, 3, '0x2F', '-', '-'), (1, 2, 0, '0x1637', '-', '-'), (1, 2, 1, '0x05', '-', '-'), (1, 2, 1, '0x11', '-', '-'), (1, 2, 1, '0x13', '-', '-'), (1, 2, 1, '0x19', '0x11', 'odd'), (1, 2, 2, '0x02', '0x04', 'tree')]
(第二种看起来很丑陋,我知道,但按值和排序&#34;先破坏&#34;并不容易,特别是当列表被字典过滤时)< / p>