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不用于项目的上述值。