a36804070 发表于 2024-1-17 13:39:01

字符串分割成为列表以后求最小值好像哪里出问题?

que = '1 3 -4 5 6 -7 -8'
spl = que.split()
max1 = max(spl)
min1 = min(spl)
print(max1,min1)

用max得出最大值是6没错,但是用min得出的最小值显示的是-4?
这....咋回事啊@fishC

FishC 发表于 2024-1-17 13:39:27

问题出在你用split()函数将字符串que分割成列表spl时,分割的结果是字符串类型的元素。而max()和min()函数默认比较的是字符串的大小,而不是其中的数值大小。

要解决这个问题,可以通过map()函数将spl列表中的元素转换为整型,然后再进行比较。具体代码如下:

que = '1 3 -4 5 6 -7 -8'
spl = que.split()
spl = list(map(int, spl))
max1 = max(spl)
min1 = min(spl)
print(max1, min1)

这样,就可以得到正确的最小值-8了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

a36804070 发表于 2024-1-17 13:45:29

FishC 发表于 2024-1-17 13:39
问题出在你用split()函数将字符串que分割成列表spl时,分割的结果是字符串类型的元素。而max()和min()函数 ...

split()分割的结果是字符串类型的元素,这个怎么理解?

FishC 发表于 2024-1-17 13:46:22

a36804070 发表于 2024-01-17 13:45
split()分割的结果是字符串类型的元素,这个怎么理解 ...

当我们使用split()函数将字符串进行分割时,它会根据指定的分隔符(默认是空格)将字符串切割成多个子串,并将这些子串保存在一个列表中。例如,对于字符串'1 3 -4 5 6 -7 -8',通过split()函数的分割结果就是一个包含了每个数字字符串的列表。

然而,需要注意的是,split()函数返回的是字符串类型的元素。也就是说,即使原始字符串中的每个子串都表示一个数字,但在列表中仍然以字符串的形式存在。例如,分割后的列表spl是['1', '3', '-4', '5', '6', '-7', '-8'],其中的每个元素都是字符串类型。

而在Python中,字符串类型的比较是按照字符的ASCII码进行比较。所以,如果直接使用max()和min()函数对spl进行比较,则会得到按照字典序排列后的最大值和最小值,而不是按照数值大小比较。

为了解决这个问题,我们可以使用map()函数将spl列表中的每个元素转换为整型,以便进行数值大小的比较。通过提供int作为map()函数的参数,我们可以将spl中的每个字符串元素转换为对应的整数。这样,再使用max()和min()函数比较时,就能得到正确的最大值和最小值。

希望这个解释能够帮助到你理解split()函数的返回结果和问题的解决方法。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 字符串分割成为列表以后求最小值好像哪里出问题?