给定一个布尔列表,比如[True, False, False, True, False, True]
,获取包含原始列表中Truthy元素的索引(从1开始,而不是从零索引)的列表/元组的最快方式是什么?所以对于上面的列表,它应该返回[1, 4, 6]
或(1, 4, 6)
。
我用的发电机是这样的:
def get_truthy_ones(self, bool_list):
return (idx + 1 for idx, value in enumerate(bool_list) if value)
然而,当我想在JSON
对象中编码结果时,这会产生一个问题,因为JSON
不编码生成器。
将括号切换为方括号以返回列表而不是生成器:
或者使用原始函数,然后从生成器创建列表:
仅仅因为它是可以做到的,一个带有
itertools.compress()
的替代版本。我认为这比其他例子可读性差,所以我不推荐它。编辑:
明显较慢,事实上,所以绝对不能使用。
相关问题 更多 >
编程相关推荐