检查列表中值类型的最有效方法

New*_*eAF 0 python numpy

我有一个包含列表的列表。例如:

lst = [1, 2, 'c', [4, 5], 'f', ['g', 'h', 'i']]
Run Code Online (Sandbox Code Playgroud)

我想在中找到列表的索引lst(inlst是 3 和 5)。

到目前为止我所拥有的:

lst_idx = [lst.index(val) for val in lst if type(val) is list]
Run Code Online (Sandbox Code Playgroud)

但是,我的实际数据有数千个列表,每个列表都有数千个元素,因此上面的列表理解需要花费大量时间。有没有办法以某种矢量化的形式做?理想情况下,我想要某种长度的掩码,len(lst)如果列表为假,则为真。

Pru*_*une 5

这里的中心问题不是子列表的大小;这应该无关紧要。相反,它是您选择查找您手头已有的列表的位置。摆脱那个昂贵的index调用:当在一个长的子列表上使用时,它是昂贵的。只需跟踪您的位置。

lst_idx = [idx for idx, val in enumerate(lst) if type(val) is list]
Run Code Online (Sandbox Code Playgroud)

还可以考虑替换type(val) is listisinstance(val, list)