带有列表和集合的Python函数

时间:2015-05-01 00:38:56

标签: python list function set

所以我试图弄清楚这个问题,但我无法弄清楚它为什么不起作用。

前提是您已获得输入列表,您必须找到第二低的值。列表可以包含任意数量的整数,并且可以重复值;你无法改变清单。

我的代码:

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__'

谢谢!

2 个答案:

答案 0 :(得分:5)

list_copy2 = list_copy2.sort()

.sort()对列表进行排序并返回None。因此,您要对列表进行排序,然后将其丢弃。你想要的只是:

list_copy2.sort()

或者:

list_copy2 = sorted(list_set)

sorted总是会返回一个列表,因此您可以使用它对该集进行排序并将其转换为一个列表!

答案 1 :(得分:2)

您需要使用sorted代替sortsorted返回一个新列表,即原始的排序版本。 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