所以我试图弄清楚这个问题,但我无法弄清楚它为什么不起作用。
前提是您已获得输入列表,您必须找到第二低的值。列表可以包含任意数量的整数,并且可以重复值;你无法改变清单。
我的代码:
def second_min(x):
input_list = list(x)
print input_list
list_copy = list(input_list)
list_set = set(list_copy)
if len(list_set) > 1:
list_copy2 = list(list_set)
list_copy2 = list_copy2.sort()
return list_copy2[1]
else:
return None
print second_min([4,3,1,5,1])
print second_min([1,1,1])
这两个输入的输出是:
3
None
它在第9行和第13行给出了错误。
TypeError: 'NoneType' object has no attribute '__getitem__'
谢谢!
答案 0 :(得分:5)
list_copy2 = list_copy2.sort()
.sort()
对列表进行排序并返回None
。因此,您要对列表进行排序,然后将其丢弃。你想要的只是:
list_copy2.sort()
或者:
list_copy2 = sorted(list_set)
sorted
总是会返回一个列表,因此您可以使用它对该集进行排序并将其转换为一个列表!
答案 1 :(得分:2)
您需要使用sorted
代替sort
。 sorted
返回一个新列表,即原始的排序版本。 sort
将按原样对列表进行排序,并在执行此操作时返回None
。
def second_min(x):
if len(x) > 1:
return sorted(x)[1]
else:
return None
>>> second_min([4,3,1,5,1])
1