2013-02-25 101 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]]) 
相关问题