如何使用 Python 获取列表列表中最大列表的索引?

Posted

技术标签:

【中文标题】如何使用 Python 获取列表列表中最大列表的索引?【英文标题】:How do I get the index of the largest list inside a list of lists using Python? 【发布时间】:2011-03-10 03:14:28 【问题描述】:

我将 Cinema4D 中的动画关键帧(使用超棒的 py4D)存储到列表列表中:

props = [lx,ly,lz,sx,sy,sz,rx,ry,rz]

我在任意动画中打印出每个属性/轨迹的关键帧,它们的长度不同:

track Position . X has 24 keys
track Position . Y has 24 keys
track Position . Z has 24 keys
track Scale . X has 1 keys
track Scale . Y has 1 keys
track Scale . Z has 1 keys
track Rotation . H has 23 keys
track Rotation . P has 24 keys
track Rotation . B has 24 keys

现在,如果我想在 Blender 中使用这些键,我需要执行以下操作:

    转到当前帧 设置该关键帧的属性(可以是位置、旋转、缩放)并插入关键帧

到目前为止,我的计划是:

    从 0 循环到所有属性的最大关键帧数 循环遍历每个属性 检查是否有为当前键存储的值,如果有,请转到 Blender 中的帧并存储值/插入关键帧

这是最好的方法吗?

这是问题的上下文。

首先我需要找到道具存储的最大列表。我是 python 新手,想知道是否有一个神奇的函数可以为你做到这一点。类似于 max(),但针对列表长度。

目前我正在考虑这样编码:

//after props are set
lens = []
for p in props: lens.append(len(p))
maxLen = max(lens)

最好的方法是什么?

谢谢

【问题讨论】:

【参考方案1】:
max(enumerate(props), key = lambda tup: len(tup[1]))

这会为您提供一个元组,其中包含 props 中最长列表的 (index, list)

【讨论】:

+1 用于使用专门为此目的设计的功能。 如果有相等怎么办?说在listA里面,我有三个大小分别为3、3、2的子列表?那么它会返回吗? @perfectm1ng 一个简单的测试确认选择了 first ,尽管max 的 2.x 文档中似乎没有特别提到这种行为(它在 3.x 中),如果你不能依赖它,我会感到惊讶。【参考方案2】:

您可以使用生成器表达式:

maxLen = max(len(p) for p in props)

【讨论】:

这会让你得到最大长度的长度。如果您这样做,则需要第二次传递列表以获取列表本身。 根据 shambulator 的回答,这个回答可以改为 maxList = max(a, key = lambda tup: len(tup)) 。所以,max 是一个“为你做这件事的神奇函数”,因为它可以接受一个关键参数。

以上是关于如何使用 Python 获取列表列表中最大列表的索引?的主要内容,如果未能解决你的问题,请参考以下文章

python中如何取一列数最大值

python 从对象列表中获取最大属性值

python找出列表中最大值

python入门教程NO.3 用python破解谍报密码

Python 统计列表里面有多少个元素

如何使用java流从列表中获取前5个最大值