python中如何从列表列表中获取唯一的组合值

python中如何从列表列表中获取唯一的组合值,python,python-2.7,unique,Python,Python 2.7,Unique,我有一个列表,比如 items = [[1, 2], [2, 3], [2, 1], [1, 2]] 只需从集合中提取唯一的组合,无需重复。例如[1,2]和[2,1]是相同的。在这种情况下,我们只需要考虑一个集合。 预期产出:[[1,2],[2,3]] 如何使用python实现这一点 items = [[1, 2], [2, 3], [2, 1], [1, 2]] result = {tuple(sorted(c)) for c in items} print(result) # {(1,

我有一个列表,比如

items = [[1, 2], [2, 3], [2, 1], [1, 2]]
只需从集合中提取唯一的组合,无需重复。例如[1,2]和[2,1]是相同的。在这种情况下,我们只需要考虑一个集合。 预期产出:[[1,2],[2,3]]

如何使用python实现这一点

items = [[1, 2], [2, 3], [2, 1], [1, 2]]
result = {tuple(sorted(c)) for c in items}
print(result)  # {(1, 2), (2, 3)}
注意这会如何影响结果中组合的顺序和组合中的数字

items = [[1, 2], [2, 3], [2, 1], [1, 2]]
r=[list(i) for i in list({tuple(sorted(c)) for c in items})]
print(r) # [[1, 2], [2, 3]]
注意这会如何影响结果中组合的顺序和组合中的数字

items = [[1, 2], [2, 3], [2, 1], [1, 2]]
r=[list(i) for i in list({tuple(sorted(c)) for c in items})]
print(r) # [[1, 2], [2, 3]]


您可以将所有内部列表冻结为冻结集,并创建一组外部列表

def deep_frozenset(container):
    """Freeze all lists into frozensets."""

    if isinstance(container, list):
        return frozenset(deep_frozenset(el) for el in container)
    else:
        return container

result = deep_frozenset(items)
assert result == frozenset({frozenset({2, 3}), frozenset({1, 2})})
您甚至可以编写一个深度集来撤消该操作

def deep_thawset(container):
    """Thaw all frozensets back into lists."""

    is isinstance(container, frozenset):
        return [deep_thawset(el) for el in container]
    else:
        return container
你甚至可以写一个往返者

def roundtrip(container):
    """Find all unique combinations.

    >>> roundtrip([[1, 2], [2, 3], [2, 1], [1, 2]])
    [[1, 2], [2, 3]]
    """

    deep_thawset(deep_frozenset(container))

您可以将所有内部列表冻结为冻结集,并创建一组外部列表

def deep_frozenset(container):
    """Freeze all lists into frozensets."""

    if isinstance(container, list):
        return frozenset(deep_frozenset(el) for el in container)
    else:
        return container

result = deep_frozenset(items)
assert result == frozenset({frozenset({2, 3}), frozenset({1, 2})})
您甚至可以编写一个深度集来撤消该操作

def deep_thawset(container):
    """Thaw all frozensets back into lists."""

    is isinstance(container, frozenset):
        return [deep_thawset(el) for el in container]
    else:
        return container
你甚至可以写一个往返者

def roundtrip(container):
    """Find all unique combinations.

    >>> roundtrip([[1, 2], [2, 3], [2, 1], [1, 2]])
    [[1, 2], [2, 3]]
    """

    deep_thawset(deep_frozenset(container))

获取所需内容的最低代码如下所示。如果必须将结果作为列表列表,则需要一个包装器

set(frozenset(i) for i in items)
或者如果不能保证列表中的每个项目在该列表中都是唯一的

set(tuple(sorted(i)) for i in items)

获取所需内容的最低代码如下所示。如果必须将结果作为列表列表,则需要一个包装器

set(frozenset(i) for i in items)
或者如果不能保证列表中的每个项目在该列表中都是唯一的

set(tuple(sorted(i)) for i in items)

您可能想要一套冻结套:

items = set(frozenset(item) for item in [[1, 2], [2, 3], [2, 1], [1, 2]])
items
{frozenset({1, 2}), frozenset({2, 3})}
Frozenset是不可变的,这使得它们可以散列,这是用作集合元素所必需的

最后,为了准确地获得所需的输出,请从集合中创建列表:

list(list(item) for item in items)
[[1, 2], [2, 3]]

您可能想要一套冻结套:

items = set(frozenset(item) for item in [[1, 2], [2, 3], [2, 1], [1, 2]])
items
{frozenset({1, 2}), frozenset({2, 3})}
Frozenset是不可变的,这使得它们可以散列,这是用作集合元素所必需的

最后,为了准确地获得所需的输出,请从集合中创建列表:

list(list(item) for item in items)
[[1, 2], [2, 3]]

可以使用一组冻结集进行查找:

items = [[1, 2], [2, 3], [2, 1], [1, 2]]

result = []
lookup = set()

for subl in items:
    fs = frozenset(subl)
    if fs not in lookup:
        result.append(subl)
        lookup.add(fs)

print(result)
# [[1, 2], [2, 3]]

可以使用一组冻结集进行查找:

items = [[1, 2], [2, 3], [2, 1], [1, 2]]

result = []
lookup = set()

for subl in items:
    fs = frozenset(subl)
    if fs not in lookup:
        result.append(subl)
        lookup.add(fs)

print(result)
# [[1, 2], [2, 3]]


请编辑您为尝试解决此问题而编写的代码,将其作为最小完整可验证示例。请编辑您为尝试解决此问题而编写的代码,将其作为最小完整可验证示例打印[[1,2],[2,3],[2,1]]。[2,1]再次是重复组合,该组合打印[[1,2],[2,3],[2,1]]。[2,1]同样是重复组合,这不是一个坏的解决方案,假设允许结果包含一个项中不存在的值。例如,如果项为[[2,1]],则结果为{1,2}这是一个不错的解决方案,假设允许结果包含项中不存在的值。例如,如果items是[[2,1]],那么结果是{1,2}。我们也可以像这样定义映射列表,setfrozenseti For i For i in items/[[1,2],[2,3]@Sivachandran yep,我的解决方案是overspec list of list of list of list受开箱即用的支持,不过请注意映射。。。不返回列表,因此它实际上是listmap…map。。返回列表。>>>res=maplist,setfrozenseti for i in items>>>typeres@Sivachandran啊,你在Python2中。你把你的问题贴上了这样的标签——我错了!当你从过去加入我们时,map将不再返回列表;我们也可以像这样定义maplist,setfrozenseti for i in items/[[1,2],[2,3]]@Sivachandran yep,我的解决方案是overspec list of list of list受开箱即用的支持,不过请注意map。。。不返回列表,因此它实际上是listmap…map。。返回列表。>>>res=maplist,setfrozenseti for i in items>>>typeres@Sivachandran啊,你在Python2中。你把你的问题贴上了这样的标签——我错了!当你从过去加入我们时,map将不再返回列表;项目中项目的listlistitem-这将输出为[[1,2],[2,3],[2,1],[1,2]]@Sivachandran不用于项目的上述值。项目中项目的listlistitem-这将输出为[[1,2],[2,3],[2,1]。@Sivachandran不用于项目的上述值。