我想知道为什么结果为'4'如果我写下面的代码:
lists = ['1','2','3','4']
print(max(lists))
lists.append(5)
print(max(lists))
我认为列表的最大方法首先从str
转换为int
,然后在前几行中给出最大值int
s,但这似乎是不真实的我尝试下一行。谁能解释一下呢?
答案 0 :(得分:1)
您的列表包含字符串,并且您附加一个整数。
列出= [' 1',' 2',' 3',' 4',5]
TypeError: '>' not supported between instances of 'str' and 'int'
如果你只有字符串或只有int&max; s max将进行比较,因为'>'运营商将工作。您需要将列表转换为所有字符串或所有整数。
lists = [int(x) for x in lists] #by list comprehension
>>> max(lists) # lists= [1, 2, 3, 4, 5]
>>> 5
lists = [str(x) for x in lists]
>>> max(lists) # lists = ['1', '2', '3', '4', '5']
>>> '5'
如果您还没有看过列表推导,那么它可以更快地完成这一操作,而且只需一行代码。
new_list = []
for x in lists:
x = int(x) #convert each individual term to integer objects
new_list.append(x)
lists = new_list
答案 1 :(得分:0)
你可以试试这个:
lists = ['1','2','3','4']
print(max(list(map(int, lists))))
lists.append(5)
print(max(list(map(int, lists))))
答案 2 :(得分:0)
实际上,对于以下两种情况,它都不会为您TypeError
提供'4'
:
list = ['1', '2', '3', '4']
list = ['1', '2', '3', '4', 5]
因为在比较python中的对象时,str
总是> int
这就是为什么您将'4'
作为最大值,因为它是strings
这是一个证明我在说什么的例子:
>print '1' > 5
True
>print '1' > '5'
False