2015-09-25 64 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評估列表理解的結果