Python:我应该使用什么函数?min() 和 max() 似乎不起作用?



我有一个程序可以输入不同的列表,它似乎可以很好地处理某些列表,但不能处理其他列表。如果你能向我解释一下,我将不胜感激,谢谢。

此输入无效:

input_list = ['-9', '-9', '-9', '-8.5', '-8.5', '-8.5', '-8.5', '-8.5', '-8.5', '-8.5', '-8.5', '-8.5', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8']
print(min(input_list))

输出(考虑到列表中有一个"-9"值,这显然不起作用(:

-8

现在,如果我将input_list[0]改为'-10',这是因为某种原因:

input_list = ['-10', '-9', '-9', '-8.5', '-8.5', '-8.5', '-8.5', '-8.5', '-8.5', '-8.5', '-8.5', '-8.5', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8', '-8']
print(max(input_list))

输出(工作正常(:

-10

如果我使用print(max(input_list)),我会在上面的两个例子中都得到输出:-9

min((和max((适用于正数列表,但不适用于负数列表。

考虑到输入根据不同的文本文件(日志(而变化,我需要找到一种方法来解决这个问题。

这只是展示了我是如何获得文件等的,给你一些见解:

from tkinter import filedialog
def openfile(filename):
with open(filename, 'r') as inputfile:
columns = inputfile.readlines()
column1 = [column.split()[7] for column in columns]
return column1
filename = filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = (("txt files","*.txt"),("all files","*.*")))
columnlist = openfile(filename)
c1 = columnlist[1:]
print(min(c1))

对于字符串,内置函数min将返回最小字母字符,例如-9-8将计算第一个字符,即'-''-',因为它们相等,将计算第二个字符'8''9',并且字符CCD_ 12是最小的,因此函数将返回CCD_;

如果你想找到最小的浮点值,那么你必须给你的函数提供浮点值,你可以在比较过程中使用key参数来转换为浮动你的列表元素:

min(input_list, key=float)

输出:

'-9'

相同的逻辑适用于max内置功能

使用将元素转换为浮动

input_list = list(map(float, input_list))
print(min(input_list))

您的问题是在字符串列表上运行max()min()。。。我不确定Python是如何处理字符串列表中的这些函数的(我认为这取决于您运行的版本(,无论如何,这都应该避免。我的解决方案是运行

# Convert strings to floats
list = [float(i) for i in list]
min(list)
max(list)

这应该能起作用

最新更新