Как получить индекс самого большого списка в списке списков, использующих Python? - PullRequest
10 голосов
/ 30 июня 2010

Я храню ключевые кадры анимации из 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. setсвойства для этого ключевого кадра (могут быть местоположение, вращение, масштаб) и вставка ключевого кадра

Пока мой план заключается в следующем:

  1. Цикл от 0 до максимумаколичество ключевых кадров для всех свойств
  2. Перебрать каждое свойство
  3. Проверьте, есть ли у него значение, сохраненное для текущего ключа, если это так, перейдите к кадру в Blender и сохраните значения /вставить ключевой кадр

Это лучший способ сделать это?

Это контекст вопроса.

Сначала мне нужно найти самый большой список, который поддерживаетмагазины.Я новичок в Python и мне было интересно, есть ли магическая функция, которая делает это для вас.Аналогично max (), но для длин списков.

В данный момент я думаю о его кодировании следующим образом:

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

Каков наилучший способ получить это?

Спасибо

Ответы [ 2 ]

22 голосов
/ 30 июня 2010
max(enumerate(props), key = lambda tup: len(tup[1]))

Это дает вам кортеж, содержащий (index, list) самого длинного списка в реквизите.

8 голосов
/ 30 июня 2010

Вы можете использовать выражение генератора:

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