我有这个数组:
[[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([])
答案 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]]