索引元组中最大的元素

时间:2014-05-09 06:24:15

标签: python tuples

a = (3,4,11,12,5,2,7,8,6,9,10)
for i in range(len(a)):
  b = a[i]
  for x in range(2,15):
    if b > x:
       c = i
print(c)

结果

>>> 
10
>>> 

在上面的例子中,我试图通过将每个元素与特定范围(2-14)进行比较来从元组a中提取最大元素。

上面例子的结果应该是3(索引为12),但我得到10。

有人可以告诉我代码有什么问题吗

3 个答案:

答案 0 :(得分:2)

为什么要使用for循环?

a = (3,4,11,12,5,2,7,8,6,9,10)
print(a.index(max(a)))

如果您正在寻找2个索引之间特定范围内的局部最大值。

startindex, endindex = 2, 14
b = a[startindex : endindex]
print(b.index(max(b)) + startindex)

如果在2到14的范围内,你的意思是元组中的值而不是索引范围,那么这对我有效。它将打印首次出现的索引。

a = (3,4,11,12,5,2,7,8,6,9,10)
subsetTuple = tuple(item for item in a if item in range(2,14))
print(a.index(max(subsetTuple)))

或者你可以在一行中完成

a = (3,4,11,12,5,2,7,8,6,9,10)
print( max( enumerate(a), key = lambda pair: pair[1] if pair[1] in range( 2, 14) else False )[0] )

答案 1 :(得分:0)

结果得到10,因为你的元组有11个元素,而最后一个的索引是10.

在第二个循环中将此索引设置为c

for x in range(2,15):
    if b > x:
        c = i

因为10是循环的元组的最后一个值,b > x至少为b = 10一次为真,c被赋予索引10(即10)并且那就是最后印刷的东西。


您如何解决问题?

我会做这样的事情:

a = (3,4,11,12,5,2,7,8,6,9,10)
c = 0
for i in range(len(a)):
    if a[i] in range(2, 15) and a[i] > a[c]:
        c = i
print(c)

这打印3

它只是循环遍历元组,检查当前值是否在2-15范围内并且如果值大于先前的最高值,如果两者都是True,则将当前索引设置为新{{1} }

输出:

答案 2 :(得分:0)

您的代码只提供最后一个元素的索引,该索引位于您定义的范围内(实际上位于索引10处)。

您需要存储局部最大值并将每个新元素与它进行比较(而不是使用范围(2,15)。

我不熟悉python,但要获得最大元素的索引,这可能是一个解决方案:

a = (3,4,11,12,5,2,7,8,6,9,10)
localMaximum = 0

for i in range(len(a)):

    b = a[i]

    if b>localMaximum:
        localMaximum = b
        c = i

print(c)