这个问题是对How do you remove duplicates from a list in whilst preserving order?的跟进。
我需要从列表中删除重复项和/或类似的值:
我从这个问题的答案开始并申请:
def f7(seq):
seen = set()
seen_add = seen.add
return [ x for x in seq if x not in seen and not seen_add(x)]
但是当我将它应用于我的数据/数组时,我得到的这显然是错误的,因为粗体的值是相等的,应该删除一个
[(Decimal('1.20149'), Decimal('1.25900')),
*(Decimal('1.13583'), Decimal('1.07862'))*,
**(Decimal('1.07016'), Decimal('1.17773'))**,
*(Decimal('1.13582'), Decimal('1.07863'))*,
(Decimal('1.07375'), Decimal('0.92410')),
(Decimal('1.01167'), Decimal('1.00900')),
**(Decimal('1.07015'), Decimal('1.17773'))**,
(Decimal('0.95318'), Decimal('1.10171')),
(Decimal('1.01507'), Decimal('0.79170')),
(Decimal('0.95638'), Decimal('0.86445')),
(Decimal('0.90109'), Decimal('0.94387')),
(Decimal('0.84900'), Decimal('1.03060'))]
您如何删除那些相同的值?
答案 0 :(得分:3)
从输出中,看起来你传递的seq
包含2元组。虽然里面的元组可能是相同的,但是元组本身(它们是序列的元素)不是,因此不会被删除。
如果您打算获得一个唯一数字的平面列表,您可以先将其展平:
seq = [ (1,2), (2,3), (1,4) ]
f7(itertools.chain(*seq))
=> [1, 2, 3, 4]