Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List Comprehension - Fatal编程技术网

Python 删除列表中的重复元组和列表

Python 删除列表中的重复元组和列表,python,list,tuples,list-comprehension,Python,List,Tuples,List Comprehension,我有一个python元组和列表列表: gammagammalambda = [[[('p', 'u'), ('r', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]], [[('p', 'w'), ('r', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]], [[('r', 'u'), ('p', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]], [[('r', 'w'), ('p',

我有一个python元组和列表列表:

gammagammalambda = [[[('p', 'u'), ('r', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]], [[('p', 'w'), ('r', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]], [[('r', 'u'), ('p', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]], [[('r', 'w'), ('p', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]]]
在哪里

[[('r', 'w'), ('p', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]]
现在,我想删除这些双元素,以便

[[[('p', 'u'), ('r', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]], [[('p', 'w'), ('r', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]]]
为此,我想使用列表理解,我已经尝试了

main_set = set(tuple(frozenset(innermost_list) for innermost_list in sublist) for sublist in gammagammalambda)
但我得到了一个错误:

TypeError: unhashable type: 'list'

希望您能帮助我。

一个备选方案是:

gammagammalambda = [[[('p', 'u'), ('r', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]],
                    [[('p', 'w'), ('r', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]],
                    [[('r', 'u'), ('p', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]],
                    [[('r', 'w'), ('p', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]]]

d = {frozenset(e[0]) : e for e in reversed(gammagammalambda)}
result = list(d.values())

print(result)
输出

[[[('p', 'u'), ('r', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]], [[('p', 'w'), ('r', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]]]
[[[('p', 'u'), ('r', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]], [[('p', 'w'), ('r', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]]]
创建一个字典,其中键表示必须唯一的值,对于每个键设置为
Gammagammalabda
的整个元素的值,最后唯一的值是字典
d
的值

或者更直接的选择:

gammagammalambda = [[[('p', 'u'), ('r', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]],
                    [[('p', 'w'), ('r', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]],
                    [[('r', 'u'), ('p', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]],
                    [[('r', 'w'), ('p', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]]]


seen = set()
result = []
for e in gammagammalambda:
    key = frozenset(e[0])
    if key not in seen:
        result.append(e)
        seen.add(key)

print(result)
输出

[[[('p', 'u'), ('r', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]], [[('p', 'w'), ('r', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]]]
[[[('p', 'u'), ('r', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]], [[('p', 'w'), ('r', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]]]
类似于,
list
不可散列,
tuple
frozenset
可散列

您可以相应地定义“唯一性密钥”,并使用,也可以在第三方库中作为或提供:

[[('p','u'),('r','w'),[[[],['q','s'],['t','v'],[], [[('p','w'),('r','u')],[[[],['q','s'],['t','v'],[]]]
您是如何得到这种嵌套列表结构的?使用list.pop;)很酷,非常感谢。“你从哪里学来的这些东西?”阿玛尼42我从stackoverflow上的问答中学到的大部分东西。此外,许多PyCon讲座和教程也会有所帮助。似乎假设
['q','s',['t','v']
位不必相同,以确保唯一性。我不确定是否是这种情况,可能是输入数据不具有代表性。问题是,我通过使用一个自编类获得这些对象。如果你想的话,我可以把代码发给你。 [[[('p', 'u'), ('r', 'w')], [[[], ['q', 's'], ['t', 'v'], []]]], [[('p', 'w'), ('r', 'u')], [[[], ['q', 's'], ['t', 'v'], []]]]]