从涉及矩阵的元组列表中删除重复项

问题描述 投票:0回答:1

我正在尝试从包含矩阵的元组列表中删除重复项。元组由两项组成:一个数字和一个相应的矩阵。 要被视为“重复”,数字和矩阵必须与列表中的另一个元组相同

例如,我的初始列表的缩短版本如下(请注意最后两个元组是相同的,因此目标是删除其中一个):

[ ( 5.42, c1 c2 c3 c4 r1 1 1 1 1 r2 1 0 0 0 r3 0 1 0 1 r4 0 0 0 0 ), ( 4.31, c1 c2 c3 c4 r1 0 1 0 1 r2 0 1 1 1 r3 0 0 0 0 r4 1 0 0 1 ), ( 5.42, c1 c2 c3 c4 r1 0 0 0 0 r2 0 0 1 0 r3 0 0 0 1 r4 1 1 1 1 ), ( 5.42, c1 c2 c3 c4 r1 0 0 0 0 r2 0 0 1 0 r3 0 0 0 1 r4 1 1 1 1 ) ]
所需的输出将是 3 个元组的列表(

而不是最初的 4 个),所有元组现在都是唯一的

[ ( 5.42, c1 c2 c3 c4 r1 1 1 1 1 r2 1 0 0 0 r3 0 1 0 1 r4 0 0 0 0), ( 4.31, c1 c2 c3 c4 r1 0 1 0 1 r2 0 1 1 1 r3 0 0 0 0 r4 1 0 0 1 ), ( 5.42, c1 c2 c3 c4 r1 0 0 0 0 r2 0 0 1 0 r3 0 0 0 1 r4 1 1 1 1 ) ]
我的所有尝试都会导致以下两个错误之一:

ValueError:DataFrame 的真值不明确。 使用 a.empty() 、 a.bool()、 a.item() 或 a.all()

-或-

TypeError:DataFrame 对象是可变的,因此无法进行散列

当我检查传入元组列表的“类型”时,它返回

。 所以,我很困惑我的错误消息引用了 DataFrames。

我多次尝试的一个例子包括:

(注意,传入的列表是下面的‘tup_list’)

尝试示例1:

from itertools import groupby


deduped = [next (g) for k, g in groupby (sorted (tup_list), key = lambda tup: tup [:2] ) ]


尝试示例2:

new_tup_list = [ tuple (item) for item in tup_list ]


deduped = list (set (new_tup_list) )


尝试示例3:

deduped = list (set (map(tuple, tup_list) ) )


 

尝试示例 4:

from collections import OrderedDict


`对于 tup_list 中的 t:

d.setdefault ( t[1], t )


deduped = list( d.values() )


尝试示例5:

deduped = set()


temp = [deduped.add((a,b))  for (a,b) in tup_list if (a,b) not in deduped]


如果您对如何成功从涉及矩阵的元组列表中删除重复项有任何建议,我将非常感激 - 谢谢。

list matrix tuples drop-duplicates
1个回答
0
投票
您可以将数据帧转换为字符串并使用它来删除重复项,例如(如果

lst

 包含您的元组):

tmp = {} for v, df in lst: tmp[(v, str(df))] = (v, df) print(list(tmp.values()))
打印:

[(5.42, c1 c2 c3 c4 r1 1 1 1 1 r2 1 0 0 0 r3 0 1 0 1 r4 0 0 0 0), (4.31, c1 c2 c3 c4 r1 0 1 0 1 r2 0 1 1 1 r3 0 0 0 0 r4 1 0 0 1), (5.42, c1 c2 c3 c4 r1 0 0 0 0 r2 0 0 1 0 r3 0 0 0 1 r4 1 1 1 1)]
    
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.