是否有辦法從列表中刪除重複的子列表,即使它們不是相同的排序?Python:從列表中刪除子列表(如果包含/不包含訂單)
所以我可以做類似化妝:
x = [[1,2],[3,4],[5,6],[2,1],[7,8]]
到
x = [[1,2],[3,4],[5,6],[7,8]]
是否有itertools功能或某事與一個循環?
謝謝!
是否有辦法從列表中刪除重複的子列表,即使它們不是相同的排序?Python:從列表中刪除子列表(如果包含/不包含訂單)
所以我可以做類似化妝:
x = [[1,2],[3,4],[5,6],[2,1],[7,8]]
到
x = [[1,2],[3,4],[5,6],[7,8]]
是否有itertools功能或某事與一個循環?
謝謝!
這將保存列表和子列表的順序,可能重複的子列表:
y, s = [], set()
for t in x:
w = tuple(sorted(t))
if not w in s:
y.append(t)
s.add(w)
如果
x = [[1,2],[3,4],[5,6],[2,1,1],[2,1],[7,8],[4,3],[1,2,1]]
然後y
將是:
[[1, 2], [3, 4], [5, 6], [2, 1, 1], [7, 8]]
+1:這保留了儘可能多的原始信息(不像我的OrderedDict方法),並且似乎滿足OP的需求。 – DSM
您可以使用frozenset
:
>>> def remove_dups(L):
return map(list, frozenset(map(frozenset, L)))
>>> x = [[1,2],[3,4],[5,6],[2,1],[7,8]]
>>> remove_dups(x)
[[5, 6], [1, 2], [8, 7], [3, 4]]
>>>
試試這個:
a=[[1,2],[3,4],[5,6],[2,1],[7,8]]
y=[]
for i in a:
if sorted(i) not in y:
y.append(i)
print y
輸出
[[1, 2], [3, 4], [5, 6], [7, 8]]
請問你曾經有區別'[1,1,2]''從[1,2,1]'?你需要保留子列表的初始順序嗎? – DSM
另外,返回列表的順序是否重要? –
@DSM是的,子列表的長度可能會增加。不,訂單並不重要。 – 5813