在条件下在python中选择数组

时间:2018-03-19 10:33:58

标签: python arrays python-3.x matrix

我有这个数组:

[[0, 1, 0, 1, 0, 1],
 [0, 0, 0, 1, 0, 0],
 [0, 0, 0, 0, 1, 0],
 [1, 0, 1, 0, 1, 0],
 [0, 1, 1, 1, 0, 1],
 [0, 1, 0, 0, 1, 1],
 [1, 1, 1, 0, 0, 0],
 [1, 1, 1, 1, 0, 1],
 [0, 1, 1, 0, 1, 0],
 [1, 1, 0, 0, 0, 1],
 [1, 0, 0, 0, 1, 0]]

我希望创建一个新数组,它只是第1列中0的行。

如何在python中构建这样的数组而不用自己编写函数。我尝试过太复杂的东西,我只需要简单的选择方法就可以得到结果。

@EDIT我忘了提到我正在使用numpy.array([])

6 个答案:

答案 0 :(得分:3)

由于您说您使用的是numpy,因此这是numpy.where的好地方:

import numpy as np

a = np.array([[0, 1, 0, 1, 0, 1], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [1, 0, 1, 0, 1, 0], [0, 1, 1, 1, 0, 1], [0, 1, 0, 0, 1, 1], [1, 1, 1, 0, 0, 0], [1, 1, 1, 1, 0, 1], [0, 1, 1, 0, 1, 0], [1, 1, 0, 0, 0, 1], [1, 0, 0, 0, 1, 0]])
a_new = a[np.where(a[:,1] == 0)]
print(a_new)
# array([[0, 0, 0, 1, 0, 0],
#        [0, 0, 0, 0, 1, 0],
#        [1, 0, 1, 0, 1, 0],
#        [1, 0, 0, 0, 1, 0]])

答案 1 :(得分:2)

您可以使用list comprehensions

list = [[0, 1, 0, 1, 0, 1],[0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 1, 0],[1, 0, 1, 0, 1, 0],[0, 1, 1, 1, 0, 1],[0, 1, 0, 0, 1, 1],[1, 1, 1, 0, 0, 0],[1, 1, 1, 1, 0, 1],[0, 1, 1, 0, 1, 0],[1, 1, 0, 0, 0, 1],[1, 0, 0, 0, 1, 0]]
list = [item for item in list if item[1] == 0]

输出:

[[0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [1, 0, 1, 0, 1, 0], [1, 0, 0, 0, 1, 0]]

如果你正在使用numpy数组,第一步是使用tolist方法将你的numpy数组转换为list。

import numpy
array = numpy.array([[0, 1, 0, 1, 0, 1],[0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 1, 0],[1, 0, 1, 0, 1, 0],[0, 1, 1, 1, 0, 1],[0, 1, 0, 0, 1, 1],[1, 1, 1, 0, 0, 0],[1, 1, 1, 1, 0, 1],[0, 1, 1, 0, 1, 0],[1, 1, 0, 0, 0, 1],[1, 0, 0, 0, 1, 0]])
list = [item for item in array.tolist() if item[1] == 0]
array = numpy.array(list)

答案 2 :(得分:2)

你可以这样做:

a = [[0, 1, 0, 1, 0, 1],[0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 1, 0],[1, 0, 1, 0, 1, 0],[0, 1, 1, 1, 0, 1],[0, 1, 0, 0, 1, 1],[1, 1, 1, 0, 0, 0],[1, 1, 1, 1, 0, 1],[0, 1, 1, 0, 1, 0],[1, 1, 0, 0, 0, 1],[1, 0, 0, 0, 1, 0]]

b = [l for l in a if len(l) > 1 and l[1] == 0]
print(b)

输出结果为:

[[0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [1, 0, 1, 0, 1, 0], [1, 0, 0, 0, 1, 0]]

答案 3 :(得分:1)

您应该使用list comp

l = [[0, 1, 0, 1, 0, 1],[0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 1, 0],[1, 0, 1, 0, 1, 0],[0, 1, 1, 1, 0, 1],[0, 1, 0, 0, 1, 1],[1, 1, 1, 0, 0, 0],[1, 1, 1, 1, 0, 1],[0, 1, 1, 0, 1, 0],[1, 1, 0, 0, 0, 1],[1, 0, 0, 0, 1, 0]]
l1 = [item for item in l if item[1] == 0]

答案 4 :(得分:1)

试试这个:

new_list = []
for i in list:
    has_zero = i[1]
    if has_zero==0:
        new_list.append(i)
print(new_list)

答案 5 :(得分:1)

这可以通过其他答案中建议的列表推导以及filter来完成,在您的情况下可能在语义上更清晰一些:

>>> a = [[0, 1, 0, 1, 0, 1],
...  [0, 0, 0, 1, 0, 0],
...  [0, 0, 0, 0, 1, 0],
...  [1, 0, 1, 0, 1, 0],
...  [0, 1, 1, 1, 0, 1],
...  [0, 1, 0, 0, 1, 1],
...  [1, 1, 1, 0, 0, 0],
...  [1, 1, 1, 1, 0, 1],
...  [0, 1, 1, 0, 1, 0],
...  [1, 1, 0, 0, 0, 1],
...  [1, 0, 0, 0, 1, 0]]
>>> filter(lambda row: row[1] == 0, a)
[[0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [1, 0, 1, 0, 1, 0], [1, 0, 0, 0, 1, 0]]