在获得列表列表时,例如:[[5, 2] [2, 5]]
我想将此列表简化为:[[5, 2]]
或[[2, 5]]
我已经尝试了以下方法:list(map(list, set(map(frozenset, parts_to_add))))
但是这种方法的问题是它把我的列表变成集合,并且在工作的同时-过滤掉所有等价的列表-还吃掉了我所有的重复值。由于python中集合的性质,当给定[[3, 3]]
时,它返回[[3]]
。还有另一种方法吗?
任何帮助将不胜感激。
答案 0 :(得分:3)
您可以这样做:
data = [[5, 2], [2, 5], [3, 3]]
result = set(tuple(e) for e in map(sorted, data))
print([list(e) for e in result])
输出
[[2, 5], [3, 3]]
如@soon所述,您可以使用冻结计数器,例如:
from collections import Counter
data = [[5, 2], [2, 5], [3, 3]]
result = [e for e in {frozenset(Counter(e)): e for e in data}.values()]
print(result)
输出
[[2, 5], [3, 3]]
上述方法还使用dict
代替了set
。
答案 1 :(得分:2)
一种更直接的方法是
data = [[2, 5], [5, 2], [3, 6], [2, 5], [6, 3]]
result = []
for i in range(len(data)):
data[i].sort()
if data[i] not in result:
result.append(data[i])
In [49]: result
Out[49]: [[2, 5], [3, 6]]