Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:生成一个;元组集;从一个;元组列表“;这并不意味着';不要把秩序考虑在内_Python_List_Tuples - Fatal编程技术网

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')]
这样的输出,所以我认为它必须是一个列表;中间列表理解是不必要的。好吧,我明白你的意思。你说得对。我只保留我的答案,因为它更容易分解。:)