我需要编写一个函数,该函数以列表为参数并在列表中查找第二高的值。 返回该值。 如果列表中只有一个值,则返回该值。 如果列表为空,则返回0。
为创建列表,我提示用户输入数字,直到用户输入-1为止。 然后我提示用户输入起始位置(loc)和长度(len)。 我将提取从索引loc开始并具有长度len的列表切片,然后使用我的函数在该列表切片中查找第二高的值。
这是我目前拥有的代码:
我尝试将
为创建列表,我提示用户输入数字,直到用户输入-1为止。 然后我提示用户输入起始位置(loc)和长度(len)。 我将提取从索引loc开始并具有长度len的列表切片,然后使用我的函数在该列表切片中查找第二高的值。
这是我目前拥有的代码:
userList = []
def main():
inputList = int(input("Enter a number >= 0. Enter -1 to end input: "))
while inputList != -1:
userList.append(inputList)
inputList = eval(input("Enter a number >= 0. Enter -1 to end input: "))
return extractList(userList)
def extractList(userList):
loc = int(input("Enter a starting location: "))
length = int(input("Enter a lenghth: "))
selSlice = userList[loc:loc + length]
if len(selSlice) == 1:
return selSlice[0]
if len(selSlice) == 0:
return 0
num = max(selSlice)
occ = userList.count(num)
for i in range(occ):
userList[userList.index(num):userList.index(num)+1] = ''
print("Second highest value in ", selSlice, "is ", max(selSlice))
main()
我正在测试切片是否有效,但它似乎以loc的起始索引为起点,到len的结束索引为终点,而不是超出len的长度。
例如,如果我有一个列表:
[1, 3, 7, 21, 37, 76, 23, 91, 15, 11, 2, 4]
如果我的loc
是3,len
是6,那么结果应该是[21, 37, 76, 23, 91, 15]
。但是我没有得到这个期望的结果,而是得到了[21, 37, 76]
。
我的extractList(a)
应该是什么?如果您能帮我编写一个查找第二大值的函数,那就太好了。感谢任何帮助!
编辑:
好的,现在我在正确的轨道上了,感谢Chris Arena和To Click or Not to Click的帮助。(代码已更新)
然而,上面的代码给出了整个列表中第二大的值,而不是切片后的列表。我不确定所有的变量是否正确。
如果我的userList
是[1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
,我的位置是6,长度为4,我得到的结果应该是[4, 6, 8, 10]
,但是切片中第二高的值是9,它是userList中的第二高值,而不是切片中的。我尝试将
userList
更改为从if len(userList) == 1:
开始到结尾的selSlice
,以查看是否有所不同。确实有所不同,但结果是可疑的(即错误的)。我使用了前面段落提到的相同的userList、loc和length。我得到的切片是[4, 6, 8]
(错误的),第二高的值是8,这对于程序返回的切片来说是错误的,但对于我请求的切片来说是正确的。所以我不确定这里可能出了什么问题。有什么建议吗?
我的最新代码显示了正确的切片,但是第二高的值错误。我得到的结果是:[4, 6, 8, 10]中第二高的值为10
不确定需要修复什么 =\
eval
,这可能会导致发生危险的事情。 - devnullast.literal_eval
代替。 - A.J. Uppal