当给出一个列表时,如:[[5, 2] [2, 5]]
我想将这个列表简化为:[[5, 2]]
或[[2, 5]]
我已经尝试了以下几种方法:list(map(list, set(map(frozenset, parts_to_add))))
但是这种方法的问题是,它以集合的形式将我的列表转换成集合,虽然它可以过滤掉所有等价的列表,但它也会吃掉所有重复的值;当给定[[3, 3]]
时,由于python中集合的性质,它返回[[3]]
。还有别的办法吗?
如果能提供任何帮助,我们将不胜感激。
发布于 2018-10-23 13:09:48
你可以这样做:
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]]
正如@ for提到的,您可以使用一个冻结的计数器,例如:
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
。
发布于 2018-10-24 08:28:31
更直接的方法是,
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]]
https://stackoverflow.com/questions/52949793
复制相似问题