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。
有人可以告诉我代码有什么问题吗
答案 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)