【问题标题】:How do I get the index of the largest list inside a list of lists using Python?如何使用 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 中使用这些键,我需要执行以下操作:

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

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

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

这是最好的方法吗?

这是问题的上下文。

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

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

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

最好的方法是什么?

谢谢

【问题讨论】:

    标签: python list blender cinema-4d


    【解决方案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 是一个“为你做这件事的神奇函数”,因为它可以接受一个关键参数。
    猜你喜欢
    • 2019-02-13
    • 2013-03-30
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多