【问题标题】:Can I quickly get the minimum length of the most inner sub-lists within a list in python?我可以快速获得python列表中最内部子列表的最小长度吗?
【发布时间】:2018-08-03 23:35:35
【问题描述】:

This 展示了如何获取第一级内部列表的最小长度。

我如何为这个列表返回4 b=[[1,0,1,2,1,1,1,3111111,[1,1,6,7]],[31,1,4,51,1,1,1],[1,1,6,7,8]] 因为[1,1,6,7] 只有 4 个元素。

我可以运行一个 for 循环来获取它。但它可以更简单吗?

我的意思是“与最深列表处于相同深度的最短列表的长度”。

【问题讨论】:

  • 先自己尝试,然后询问是否遇到问题或错误。祝你好运!
  • 当您说“最内部子列表的最小长度”时,您的意思是“与最深列表处于相同深度的最短列表的长度”吗?还是只是“给定列表中包含的最短列表的长度”?
  • 但是与其他列表处于同一级别的外部列表是[1,0,1,2,1,1,1,3111111,[1,1,6,7]],其中[1,1,6,7] 是子列表。你还想考虑它的长度吗?按照这个逻辑,我认为你的答案应该是 0,因为其他列表没有嵌套列表。
  • 我的意思是最深的列表。

标签: python python-3.x list variable-length


【解决方案1】:

v1,任意深度的最小长度:

>>> b = [[1,0,1,2,1,1,1,3111111,[1,1,6,7]],[31,1,4,51,1,1,1],[1,1,6,7,8]]
>>> def lists_in(L):
...     for element in L:
...         if isinstance(element, list):
...             yield element
...             yield from lists_in(element)
...             
>>> min(lists_in(b), key=len)
[1, 1, 6, 7]
>>> len(min(lists_in(b), key=len))
4

v2,新增要求“与最深列表处于相同深度的最短列表的长度”:

>>> def depths_and_lengths(L, depth=0):
...     for element in L:
...         if isinstance(element, list):
...             yield (depth, len(element))
...             yield from depths_and_lengths(element, depth-1)
...             
...             
>>> min(depths_and_lengths(b))[1]
4
>>> min(depths_and_lengths([[[1, 2]]]))[1]    # Stefan Pochmann example
2

【讨论】:

  • 我不认为这会计算“与最深列表处于相同深度的最短列表的长度”
  • 对于[[[1, 2]]],此报告为1,尽管唯一最内部的列表是[1, 2],其长度为2
  • 天哪,伙计们,在我发布这个答案之后,这个模糊的要求刚刚在 2 分钟前被编辑。
  • 艰难的人群@wim
  • @BradSolomon 说在他的个人资料中引用“提防不会被细节困扰的人”的人:-)
【解决方案2】:

这是一个错误的答案:

def mpr(x, inital=[]):
    if isinstance(x, list):
        inital.append(len(x))
        map(lambda x: mpr(x, inital), x)
    return inital

mpr(b) -> [3, 9, 4, 7, 5]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多