2015-09-25 85 views
2

我有一个列表,并希望根据关系操作输出项目。Python - 列表中的关系运算符

a = range(10)。 我希望做的: min(a[a>5]) - >6

如何做到这一点?

我有print min([x for x in a if x > 5])但有没有更好的?


a[a>5]的输出是1

这是什么意思?

我最初认为它是返回1表明这个条件满足的列表成员。但是,a[a>50]也返回1

+3

'a [a> 5] == a [真] == a [1] == 1'。在Python 3中,你会得到'TypeError'。 –

+1

如果您使用'numpy',否则您可以使用该语法,否则您当前的方法很好 - 您可以使用'min(filter(lambda x:x> 5,range(10)))'来获得更多功能的方法,表达式/列表解析通常被认为是更pythonic – jonrsharpe

+0

@AshwiniChaudhary 我不知道我理解关系列表上的操作。 '>>> a = range(10); >>> print type(a),a> 15'给出' True' 发生了什么? –

回答

1

如果你愿意使用库来做你想做的事,你可以使用numpy。它允许那种indexing。示例 -

In [2]: import numpy as np 

In [6]: a = [1,2,3,4,5,6,7,8,9,10,11,12] 

In [8]: na = np.array(a) #There are better ways to create this numpy array, like `np.arange(1,13)` 

In [9]: na[na > 5] 
Out[9]: array([ 6, 7, 8, 9, 10, 11, 12]) 

In [10]: min(na[na > 5]) 
Out[10]: 6 
+1

'na = np.arange(1,13)'会节省几行! – jonrsharpe

+1

是的,但我只是把这个,以显示如何将普通列表转换为numpy数组,虽然它的平凡:-) –

5

你可以使用一个生成器表达式来进行滤波,第一

>>> min(i for i in a if i > 5) 
6 

这样就避免了在内存中创建一个列表,如果你已经min评估列表理解的结果