我有一个列表,将永远只包含1和零。 我需要得到列表的非零指数的列表:如何获得列表中非零元素的索引列表?
a = [0, 1, 0, 1, 0, 0, 0, 0]
b = []
for i in range(len(a)):
if a[i] == 1: b.append(i)
print b
什么将是实现这一目标的“Python化”的方式?
我有一个列表,将永远只包含1和零。 我需要得到列表的非零指数的列表:如何获得列表中非零元素的索引列表?
a = [0, 1, 0, 1, 0, 0, 0, 0]
b = []
for i in range(len(a)):
if a[i] == 1: b.append(i)
print b
什么将是实现这一目标的“Python化”的方式?
[i for i, e in enumerate(a) if e != 0]
由于THC4k提到压缩(在python2.7 +提供)
>>> from itertools import compress, count
>>> x = [0, 1, 0, 1, 0, 0, 0, 0]
>>> compress(count(), x)
<itertools.compress object at 0x8c3666c>
>>> list(_)
[1, 3]
+1,尽管通过使用“_”最后一个结果绑定到作为参数传递给list()函数/类型的迭代器对象,使得事实上几乎不存在的解释变得更加模糊。 – martineau 2010-11-06 09:33:07
不是一个真正的 “新” 的答案,但numpy有这种内置的为好。
import numpy as np
a = [0, 1, 0, 1, 0, 0, 0, 0]
nonzeroind = np.nonzero(a)[0] # the return is a little funny so I use the [0]
print nonzeroind
[1 3]
这很酷!我需要在Cinema-4D中使用一些Python脚本,所以当时它仅仅为此而没有意义。 numpy看起来非常好!感谢分享! – 2011-05-26 22:39:08
我还提供numpy然后其他答案...这更容易理解......它更符合逻辑,更多,如果你来自matalb :-) – otmezger 2013-03-18 20:57:52
只是希望为前面的“滑稽”输出添加解释。结果是一个元组,其中包含矩阵每个维度的索引向量。在这种情况下,用户正在处理numpy中被认为是矢量的东西,所以输出是一个元素的元组。
import numpy as np
a = [0, 1, 0, 1, 0, 0, 0, 0]
nonzeroind = np.nonzero(a)
print nonzeroind
(array([1, 3]),)
谢谢你,那真是太快了! – 2010-11-06 01:46:08
让我想起itertools.compress,但它不是枚举而是拉链。 – 2010-11-06 01:58:47
只是'如果e'也适用 – keyser 2015-05-06 12:40:13