2013-02-25 88 views
0

這是情景的樣子: 我嘗試從列表中獲取最大元素,基於另一個元素,它基本上代表了我需要搜索的元素中的索引。 foo的長度可以更改。但測試的長度不會改變。Python - 在另一個列表中的列表中的最大值

>>> test = [1,2,3,4,5,6,7,8] 
>>> foo = [1,4] 
>>> print max(test[foo[1]]) 

該工程..

但是,當我試圖做

>>> print max(test[foo]) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: list indices must be integers, not list 

有一些其它的方式,或者我應該是指到另一個模塊? 如果是的話,可否請你提出建議。

+1

這是*列表*,而不是*數組*。我也不清楚這裏的目標是什麼,你是否想要選擇項目1和項目4的最大值,還是該範圍或其他?你的第一個例子只是將'foo [1]'解析爲'4',然後返回'test [4]',即'5',然後給出'max(5)',即'5'。 – 2013-02-25 03:12:43

+1

起初好像是'foo'代表一個範圍,但是你認爲'foo'的* length *可以改變?那是什麼意思? – 2013-02-25 03:14:06

+0

@Lattyware我很抱歉,我會糾正它。 我試圖從列表'foo'中的值作爲索引,從測試列表中獲取最大值。我現在更清楚了嗎? – rnish 2013-02-25 03:22:04

回答

4

基於其他帖子,我不知道這是否是你問的,但假設你想從test的所有元素的最大值與指數foo(這是我所瞭解),你可以這樣做:

print max([test[i] for i in foo]) 
+1

看來這是OP之後的事情 - 注意它可以簡單地作爲[生成器表達式](http://www.youtube.com/watch?)作爲'max(test [i] for i in foo)'。 v = pShL9DCSIUw)將假定在像這樣的函數調用的上下文中。 – 2013-02-25 03:26:37

2

如果foo是總有兩個元素的列表,說明指數之間你要搜索,你可以這樣做:

sl = slice(*foo) 
print(max(test[sl])) 
+1

從技術上講,'slice()'也將接受一個(開始給定點)或三個參數(開始,停止,步驟)。 – 2013-02-25 03:18:14

+0

是的,我假定在其中一個註釋中已經提出了一點 - 'foo'代表一個範圍,但OP將其稱爲_length_。感謝您的鼓勵。 – 2013-02-25 03:23:36

0
test = [1,2,3,4,5,6,7,8] 
foo = [1,4] 
print max(test[foo[0]:foo[1]]) 
相關問題