根据标题,我有这样一个嵌套列表(嵌套列表是固定长度):# ID, Name, Value
list1 = [[ 1, "foo", 10],
[ 2, "bar", None],
[ 3, "fizz", 57],
[ 4, "buzz", None]]
我想返回一个列表(项数等于list1中的子列表的长度),其中子列表是没有第x项的行的索引,即:
^{pr2}$
以list1为例,结果应该是:[[0, 1, 2, 3], [0, 1, 2, 3], [0, 2]]
我目前的实现方式是:indices = [[] for _ in range(len(list1[0]))]
for i, row in enumerate(list1):
for j in range(len(row)):
if not isinstance(row[j], types.NoneType):
indices[j].append(i)
…这是可行的,但可能很慢(列表的长度为几十万)。在
有没有更好/更有效的方法?在
编辑:
我已经将上面的for循环重构为嵌套的列表理解(类似于SilentGhost的答案)。下面这一行给出了与我最初实现相同的结果,但是运行速度快了大约10倍。在[[i for i in range(len(list1)) if list1[i][j] is not None] for j in range(len(log[0]))]