names = ['James','Adam','Ross','Bryce','Sue','Matt','Chris','Sarah','Rachel','Aron']
def sort(names):
less = []
equal = []
greater = []
if len(names) > 1:
pivot = names[0]
for x in names:
if x < pivot:
str(less.append(x))
elif x == pivot:
str(equal.append(x))
elif x > pivot:
str(greater.append(x))
return sort(less) + sort(equal) + sort(greater)
else:
if len(names) == 1:
return names
print sort(names)
每当我运行它时,它都会返回此错误:
TypeError: unsupported operand type(s) for +: 'NoneType' and 'list'.
有人可以告诉我这是怎么回事?我是Python的新手
答案 0 :(得分:1)
您正尝试向None
类型添加列表,如错误所示。它发生在您拥有的代码示例的第16行。
但让我们看看这些内容:
pivot = names[0]
for x in names:
if x < pivot:
str(less.append(x))
既然你说你是Python新手,我会解释一下。当你说x < pivot
你没有问它是否在列表中出现之前,你进行了词典比较。例如,在Python中我们有:
>>> 'a' < 'b'
True
其次,str(less.append(x))
也没有做任何事情。你要求它从列表操作中创建一个字符串。它将返回None
类型。像这样:
>>> less = []
>>> str(less.append('hi'))
'None'
所以,在你所有的东西结束时,问题是你的函数什么都不返回,因为当列表长度为0时你没有考虑到。
答案 1 :(得分:1)
您应该检查0大小列表:
names = ['James','Adam','Ross','Bryce','Sue','Matt','Chris','Sarah','Rachel','Aron']
def sort(names):
less = []
equal = []
greater = []
if len(names) > 1:
pivot = names[0]
for x in names:
if x < pivot:
str(less.append(x))
elif x == pivot:
str(equal.append(x))
elif x > pivot:
str(greater.append(x))
return sort(less) + sort(equal) + sort(greater)
else:
if len(names) == 1 or len(names) == 0:
return names
print sort(names)
答案 2 :(得分:0)
与python中的所有函数一样,sort函数在未显式返回某些内容时返回None。由于您不熟悉python,请先尝试在IDE中使用列表,然后再使用算法。
some_list = [1,2,3,4]
an_index = some_list.index(1)
some_list.append(5) #adding at the end of list
文档是一个非常好的起点:http://docs.python.org/2/tutorial/datastructures.html
答案 3 :(得分:0)
对空列表进行排序,在这种情况下less
将返回None
。