Python:生成一个;元组集;从一个;元组列表“;这并不意味着';不要把秩序考虑在内
如果我有如下元组列表:Python:生成一个;元组集;从一个;元组列表“;这并不意味着';不要把秩序考虑在内,python,list,tuples,Python,List,Tuples,如果我有如下元组列表: [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')] 我想删除重复的元组(在内容和内部项目顺序方面都是重复的),以便输出: [('a', 'b'), ('c', 'd')] 或 我尝试将其转换为set,然后转换为list,但输出将在结果集中同时维护('b','a')和('a','b')) 如果您不介意将frozenset与一个集合一起使用: l = [('a', 'b'), ('c', 'd'), ('a', 'b'), (
[('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
我想删除重复的元组(在内容和内部项目顺序方面都是重复的),以便输出:
[('a', 'b'), ('c', 'd')]
或
我尝试将其转换为set,然后转换为list,但输出将在结果集中同时维护
('b','a')
和('a','b')
) 如果您不介意将frozenset与一个集合一起使用:
l = [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
print(set(map(frozenset,l)))
{frozenset({'a', 'b'}), frozenset({'c', 'd'})}
如果愿意,可以将其转换回元组:
l = [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
print(list(map(tuple,set(map(frozenset ,l)))))
[('a', 'b'), ('d', 'c')]
或者使用集合并颠倒元组的顺序:
l = [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
seen, pairs = set(), []
for a,b in l:
if (a,b) not in seen and (b,a) not in seen:
pairs.append((a,b))
seen.add((a,b))
如果您不介意将frozenset与一个集合一起使用:
l = [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
print(set(map(frozenset,l)))
{frozenset({'a', 'b'}), frozenset({'c', 'd'})}
如果愿意,可以将其转换回元组:
l = [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
print(list(map(tuple,set(map(frozenset ,l)))))
[('a', 'b'), ('d', 'c')]
或者使用集合并颠倒元组的顺序:
l = [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
seen, pairs = set(), []
for a,b in l:
if (a,b) not in seen and (b,a) not in seen:
pairs.append((a,b))
seen.add((a,b))
如果订单不重要,这可以解决您的问题
a=[('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
a=map(tuple,[sorted(i) for i in a])
print list(set(a))
输出:
[('a', 'b'), ('c', 'd')]
如果订单不重要,这可以解决您的问题
a=[('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
a=map(tuple,[sorted(i) for i in a])
print list(set(a))
输出:
[('a', 'b'), ('c', 'd')]
试试这个:
a = [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
b = list(set([ tuple(sorted(t)) for t in a ]))
[('a', 'b'), ('c', 'd')]
让我们将其分解为:
如果对元组进行排序,它将成为一个排序列表
>>> t = ('b', 'a')
>>> sorted(t)
['a', 'b']
对于a
中的每个元组t
,对其排序并将其转换回元组
>>> b = [ tuple(sorted(t)) for t in a ]
>>> b
[('a', 'b'), ('c', 'd'), ('a', 'b'), ('a', 'b')]
将结果列表b
转换为集合:值现在是唯一的。将其转换回列表
>>> list(set(b))
[('a', 'b'), ('c', 'd')]
瞧
请注意,您可以使用a而不是a跳过中间列表b
的创建
试试这个:
a = [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
b = list(set([ tuple(sorted(t)) for t in a ]))
[('a', 'b'), ('c', 'd')]
让我们将其分解为:
如果对元组进行排序,它将成为一个排序列表
>>> t = ('b', 'a')
>>> sorted(t)
['a', 'b']
对于a
中的每个元组t
,对其排序并将其转换回元组
>>> b = [ tuple(sorted(t)) for t in a ]
>>> b
[('a', 'b'), ('c', 'd'), ('a', 'b'), ('a', 'b')]
将结果列表b
转换为集合:值现在是唯一的。将其转换回列表
>>> list(set(b))
[('a', 'b'), ('c', 'd')]
瞧
请注意,您可以使用a而不是a跳过中间列表b
的创建
用于救援的内置类型:
data = [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
set(map(frozenset, data))
{frozenset({'a', 'b'}), frozenset({'c', 'd'})}
用于救援的内置类型:
data = [('a', 'b'), ('c', 'd'), ('a', 'b'), ('b', 'a')]
set(map(frozenset, data))
{frozenset({'a', 'b'}), frozenset({'c', 'd'})}
... 将所有项目放在一个集合中,然后根据集合项目创建一个列表-这可能以前有人问过。您的问题是
('a','b')!=('b','a')
或者更具体地说,散列('a','b'))!=散列(('b','a'))
。做一个初始列表理解,对每个元组进行排序,然后转换为一个集合。此外,您可能应该改写您的问题,因为“在内容和内部项目顺序方面重复”意味着您希望('a','b')
和('b','a')
不相等。。。。。。。将所有项目放在一个集合中,然后根据集合项目创建一个列表-这可能以前有人问过。您的问题是('a','b')!=('b','a')
或者更具体地说,散列('a','b'))!=散列(('b','a'))
。做一个初始列表理解,对每个元组进行排序,然后转换为一个集合。此外,您可能应该改写您的问题,因为“在内容和内部项目顺序方面重复”意味着您需要('a','b')
和('b','a'))
不相等……我喜欢这个解决方案,因为它没有对元组的长度或原始内部顺序做任何假设。@Padraiccningham,实际上上一个还可以。哈哈。我只是更喜欢你的一个,因为它喜欢速记,但我没有注意到它不会对列表元素进行排序。不幸的是,它会对列表本身进行排序。是的,它的意思是a=map(tuple,map(sorted,l))
,如果它是python2,那么imap
会更好。我喜欢这个解决方案,因为它不对元组的长度或原始内部顺序做任何假设。@padraickenningham,实际上上一个还可以。哈哈。我只是更喜欢你的一个,因为它喜欢速记,但我没有注意到它不会对列表元素进行排序。不幸的是,它会对列表本身进行排序。是的,它的意思是a=map(tuple,map(sorted,l))
,如果它是python2,那么imap
会更好,除了您不需要实际创建中间列表集合([tuple(sorted(t))for t in a])
<代码>为a中的t设置(元组(排序的(t))。确实,这不是OP要求。但是他需要像[('a','b'),('c','d')]
这样的输出,所以我认为它必须是一个列表;中间列表理解是不必要的。好吧,我明白你的意思。你说得对。我只保留我的答案,因为它更容易分解。:)很好,除了您不需要实际创建中间列表集合([tuple(sorted(t))for t in a])
<代码>为a中的t设置(元组(排序的(t))。确实,这不是OP要求。但是他需要像[('a','b'),('c','d')]
这样的输出,所以我认为它必须是一个列表;中间列表理解是不必要的。好吧,我明白你的意思。你说得对。我只保留我的答案,因为它更容易分解。:)