我有理解如何解决代码中的错误。它来了:
def counting_sort(some_list, max=100000):
licznik = [0] * (max+1)
for x in some_list:
licznik[x] = licznik[x]+1
i=0
for x in range(max+1):
for y in range(licznik[x]):
some_list[i]=x
i=i+1
return some_list.reverse()
def gen(number, b=100000):
some_list = []
return [some_list.append(random.randint(0, b)) for x in xrange(number)]
domain = [10000, 25000, 50000, 100000, 200000, 300000, 400000, 500000, 750000, 1000000]
for element in domain:
print 'Results for: ' + str(element) + ' elements:'
for j in range(0, 10):
temp_list = gen(element)
start = time.time()
counting_sort(temp_list)
end = time.time() - start
print end
这是行的问题:
for x in some_list:
licznik[x] = licznik[x]+1
我想它应该通过列表理解来解决,但我不知道如何以这种方式进行转换。有什么帮助建议?谢谢你的进步。
答案 0 :(得分:2)
您在函数some_list
中填充None
gen
个值。改变行
return [some_list.append(random.randint(0, b)) for x in xrange(number)]
为:
return [(random.randint(0, b)) for x in xrange(number)]
答案 1 :(得分:2)
您的gen
功能错误... list.append
返回None
并修改somelist
,更改为:
def gen(number, b=100000):
return [random.randint(0, b) for x in xrange(number)]
演示:
some_list = []
print [some_list.append(10) for _ in xrange(5)]
# [None, None, None, None, None]
print some_list
# [10, 10, 10, 10, 10]
您正在返回None
s的列表。
答案 2 :(得分:1)
您尝试使用None
值作为第5行列表licznik
的键。
如果您将Gen
功能修改为此功能,则应该可以正常工作。
def gen(number, b=100000):
return [(random.randint(0, b)) for x in xrange(number)]