如何使用 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 获取列表列表中最大列表的索引?的主要内容,如果未能解决你的问题,请参考以下文章