[英]How to filter multi-dimensional list in Python 3?
我有清单:
[1,4,4,2,[[[4],5]],5,6]
我如何过滤这个列表,我将有唯一的值,但保存元素的尺寸?
结果:
[1,4,2,[[5]],6]
您可以使用递归函数,它的工作方式与您可能在网上找到的任何其他唯一查找解决方案一样,但是当它遇到一个内部列表时,它会用这个内部列表调用自己(仅从中获取唯一值),同时将集合作为参数传递已经看到的元素(因此“独特之处”被定义为全新的元素)。
尝试这个:
lst = [1, 4, 4, 2, [[[4], 5]], 5, 6]
def unique(lst, already_seen):
result = []
for item in lst:
if isinstance(item, list):
inner_uniques = unique(item, already_seen)
if len(inner_uniques) > 0:
result.append(inner_uniques)
else: # assuming item is a number
if item in already_seen:
continue
else: # new number
result.append(item)
already_seen.add(item)
return result
result = unique(lst, set()) # starting with an empty ser
print(result)
输出:
[1, 4, 2, [[5]], 6]
这是一个修改原始列表而不是创建新列表的版本(并返回它,这不是 Pythonic 但可能很有用):
def remDups( s, seen=set() ):
to_pop = []
for i,v in enumerate(s):
if isinstance(v,list):
remDups( v, seen )
elif v in seen:
to_pop = [i]+to_pop
else:
seen.add(v)
for i in to_pop:
s.pop(i)
return s
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.