Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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 - Fatal编程技术网

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

如何在python中有效地从列表中删除相同长度的元素,python,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],

例如,我有一个列表:

[[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表示l中的e,如果len(e)不在s和s中,则添加(len(e))为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]]

很好,只需使用反向列表!是的,我不确定选择哪一个是否重要,而投反球让它看起来太难看了,不适合一句台词:-)选择哪一个无关紧要。非常感谢@本:为什么?这只是
{len(i):我在l[:-1]}.values()
很好的观点。我忘了使用负切片步骤和dict理解(工作时使用Py 2.6)