Python数组的简单问题

Python数组的简单问题,python,arrays,list,Python,Arrays,List,我有以下两个阵列: array1 = [0, 1, 1, 0] array2 = ['foo', 'bar', 'hello', 'bye'] 我想将array2的值保存到数组中,该数组在array1中具有索引1 在上面的示例中,所需的结果应该是result\u array=['bar','hello'] 我试过类似的方法,但不起作用 for i in array1: if i = 1: result_array.append(array2[i]) 提前感谢您的代码的修改版本将

我有以下两个阵列:

array1 = [0, 1, 1, 0]
array2 = ['foo', 'bar', 'hello', 'bye']
我想将
array2
的值保存到数组中,该数组在
array1
中具有索引
1

在上面的示例中,所需的结果应该是
result\u array=['bar','hello']

我试过类似的方法,但不起作用

for i in array1:
  if i = 1:
     result_array.append(array2[i])

提前感谢

您的代码的修改版本将有效:

for i in range(len(array1)):
    if array1[i]:
        result_array.append(array2[i])
代码中的问题有:

1) 您可以在array1中为i使用
,其中i是为表示列表中的值而创建的临时迭代器。所以它总是0或1,这取决于它代表的列表值


2) 如果i=1,则
是错误的<代码>=
是赋值运算符,应使用
=
比较值。既然你说列表只包含0和1,
如果我:
我们足够了

你的代码的问题是你在
条件下使用了
=
,如果
条件,用
=
替换它。其次,为了获得索引以及您需要使用的项
枚举
,当前您正在追加
数组[i]
,因此您的代码将追加两次
'bar'

>>> result_array = []
>>> for i, x in enumerate(array1):
        if x == 1:
            result_array.append(array2[i])
...         
>>> result_array
['bar', 'hello']
另一个更好的方法是使用
zip
和列表理解:

>>> [b for a, b in zip(array1, array2) if a==1]
['bar', 'hello']
最快的方法是使用:

您可以使用内置功能和:

或者,如果你喜欢:


对于小列表,您可以使用简单的zip而不是izip。

如果您只对数组1中的
1
s感兴趣,那么您可以使用
zip
同时迭代多个列表/数组,请参见(注意,zip将只迭代到较短列表的长度):

如果您想要在defaultdict中使用array1作为键的两个数组的索引,请参阅:


我假设
如果I=1:
是一个输入错误?您应该指出,这不起作用意味着抛出异常提示注释:这些不是数组,它们是
列表。
>>> from itertools import compress
>>> list(compress(array2, array1))
['bar', 'hello']
print [y for x, y in zip(array1, array2) if x == 1]
>>> import numpy as np
>>> array1 = np.array([0, 1, 1, 0])
>>> array2 = np.array(['foo', 'bar', 'hello', 'bye'])
>>> # np.nonzero returns indices of array1 that are, well, non-zero
>>> array2[np.nonzero(array1)]
array(['bar', 'hello'], 
      dtype='|S5')
from itertools import izip
res = [v2 for v1, v2 in izip(array1, array2) if v1==1]
>>> array1 = [0, 1, 1, 0]
>>> array2 = ['foo', 'bar', 'hello', 'bye']
>>> [j for i,j in zip(array1, array2) if i == 1]
['bar', 'hello']
>>> from collections import defaultdict
>>> array1 = [0, 1, 1, 0]
>>> array2 = ['foo', 'bar', 'hello', 'bye']
>>> array3 = defaultdict(list)
>>> for i,j in zip(array1,array2):
...     array3[i].append(j)
... 
>>> array3[1]
['bar', 'hello']
>>> array3[0]
['foo', 'bye']