过滤一个绝对条件的列表

时间:2017-04-02 14:25:17

标签: python list python-3.x filtering

我有一个名为x

的数组列表
[array([ -1.5768,  10.843 ,   2.5462,  -2.9362,   0.    ]),
 array([-0.38214,  8.3909 ,  2.1624 , -3.7405 ,  0.     ]),
 array([-0.24811, -0.17797,  4.9068 ,  0.15429,  0.     ]),
 array([-0.96511,  9.4111 ,  1.7305 , -4.8629 ,  0.     ]),
 array([-1.6162 ,  0.80908,  8.1628 ,  0.60817,  0.     ])]

我想检查每行的第一列是否大于> 0。 ([-1.5768,-0.38214,.....)]

如果所有行符合此条件,我想返回"是" 否则我想要回复一个" no"。

我能够返回"是"或"不"对于每一行(所以输出将是许多yeses或noes但我只是希望输出是一个是或否。

for row in x:
    if row[0] > 0:
        print ('yes')
    else: print('no')

1 个答案:

答案 0 :(得分:3)

在python中,您可以在all()函数中使用生成器表达式:

In [7]: arr = [[ -1.5768,  10.843 ,   2.5462,  -2.9362,   0.    ],
   ...:  [-0.38214,  8.3909 ,  2.1624 , -3.7405 ,  0.     ],
   ...:  [-0.24811, -0.17797,  4.9068 ,  0.15429,  0.     ],
   ...:  [-0.96511,  9.4111 ,  1.7305 , -4.8629 ,  0.     ],
   ...:  [-1.6162 ,  0.80908,  8.1628 ,  0.60817,  0.     ]]

In [8]: 

In [8]: all(i[0] > 0 for i in arr)
Out[8]: False

In [9]: all(i[0] < 0 for i in arr)
Out[9]: True

在numpy中你可以通过简单的比较和array.all()属性来实现:

In [11]: import numpy as np

In [12]: arr = np.array(arr)

In [14]: (arr[:, 0] > 0).all()
Out[14]: False

In [15]: (arr[:, 0] < 0).all()
Out[15]: True