繁体   English   中英

如何从python中的列表中有效地删除相同长度的元素

[英]How to efficiently remove the same-length elements from a list in python

例如,我有一个列表:

[[1,3],[23,4],[13,45,6],[8,3],[44,33,12]]

有没有什么有效的方法可以让我最终获得下面的列表?

[[1,3],[13,45,6]]

对于列表的每个长度,只保留一个元素。

只需将字典键入长度并获取其值:

>>> l = [[1,3],[23,4],[13,45,6],[8,3],[44,33,12]]
>>> dict((len(i), i) for i in l).values()
[[8, 3], [44, 33, 12]]

s = set() [e for e in l if len(e) not in s and s.add(len(e)) is None]

然后总是有明确的递归...

>>> l = [[1,3],[23,4],[13,45,6],[8,3],[44,33,12]]
>>> def f(x):
...     if x == []: return []
...     else      : return [x[0]] + f( filter(lambda m:len(m)!=len(x[0]),x) )
... 
>>> f(l)
[[1, 3], [13, 45, 6]]

将列表映射到元素长度集并拉出具有相应长度的元素,如下所示:

#!/usr/bin/py3
#coding: utf-8

def uniqlens (ls):
  for length in set(map(lambda x: len(x), ls)):
    for elem in ls:
      if len(elem) == length:
        yield elem
        break

coll  = [[1,3],[23,4],[13,45,6],[8,3],[44,33,12]]
print(list(uniqlens(coll)))
# [[1, 3], [13, 45, 6]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM