我有一份清单清单:
[[1, 2, 5], [1, 7], [1, 6, 1], [2, 6], [2, 1, 5], [7, 1]]
我试图删除元素[2,1,5]
&元素[7,1]
& [1,2,5]
之后的[1,7]
let priceFromFunction = ["<?php golemPrice();?>"];
具有相同的元素,顺序并不重要。
删除此类元素的最快方法是什么?
答案 0 :(得分:4)
您可以跟踪set
中已见过的元素。您可以先对它们进行排序,以便正常化&#34;他们因而忽略了元素的顺序。
>>> lst = [[1, 2, 5], [1, 7], [1, 6, 1], [2, 6], [2, 1, 5], [7, 1]]
>>> seen = set()
>>> unique = []
>>> for x in lst:
... srtd = tuple(sorted(x))
... if srtd not in seen:
... unique.append(x)
... seen.add(srtd)
...
>>> unique
[[1, 2, 5], [1, 7], [1, 6, 1], [2, 6]]
您必须先将已排序的元素转换为元组,然后再将它们放入集合中,因为列表不可清除。您也可以考虑使用frozenset
,但这对于具有重复元素的条目(例如[1, 6, 1]
答案 1 :(得分:0)
您可以这样做:
a = [[1, 2, 5], [1, 7], [1, 6, 1], [2, 6], [2, 1, 5], [7, 1]]
b = []
for k in a:
if not sorted(k) in b:
b.append(k)
>>> b
[[1, 2, 5], [1, 7], [1, 6, 1], [2, 6]]
Ps:如果您的输入列表中有重复项,请考虑在使用循环之前使用set()
删除它们。
修改强>
如果订单无关紧要:
a = [[1, 2, 5], [1, 7], [1, 6, 1], [2, 6], [2, 1, 5], [7, 1]]
b = [[1, 2, 5], [7, 1], [1, 6, 1], [2, 6], [2, 1, 5], [1, 7]]
>>> list(map(list, set(tuple(sorted(k)) for k in a)))
[[2, 6], [1, 1, 6], [1, 2, 5], [1, 7]]
>>> list(map(list, set(tuple(sorted(k)) for k in b)))
[[2, 6], [1, 1, 6], [1, 2, 5], [1, 7]]
答案 2 :(得分:0)
您可以按如下方式创建集合列表:
my_list = [[1, 2, 5], [1, 7], [1, 6, 1], [2, 6], [2, 1, 5], [7, 1]]
new_list = [frozenset(element) for element in my_list]
要删除重复项,请执行以下操作:
cleaned_set = set(new_list)
cleaning_set是集合的集合,因此不包含重复项。