2017-01-28 5 views
0

Ich versuche, mir ein paar Sortieralgorithmen in Python beizubringen, und ich habe ein bisschen Probleme mit der Ausgabe. Ich versuche, eine Zählung Sortieralgorithmus zu implementieren, und ich habe so weit gekommen:Problem beim Implementieren eines Zählsortieralgorithmus

def counting_sort(l): 
    nums = l 
    highest = max(nums) + 1 
    helper_list = [0] * highest 
    s_list = [] 
    for i in range(len(nums)): 
     value = nums[i] 
     helper_list[value] += 1 

    for j in range(len(helper_list)): 
     s_list.append([j] * helper_list[j]) 

    return s_list 

Alles wird fast in Ordnung, aber wenn ich gebe einen Eingang wie [5, 2, 2, 3, 1, 2].

Ich bekomme eine Ausgabe wie: [[], [1], [2, 2, 2], [3], [5]].

Antwort

1

Sie müssen nur die "Append" für "erweitern" ändern. Die Append-Funktion fügt Ihrer Liste ein Element hinzu, in diesem Fall eine andere Liste. Die Extend-Funktion verknüpft Ihre Liste mit der als Parameter angegebenen Liste.

def counting_sort(elements): 
    highest = max(elements) + 1 
    helper_list = [0] * highest 
    s_list = [] 
    for value in elements: 
     helper_list[value] += 1 

    for j in range(len(helper_list)): 
     s_list.extend([j] * helper_list[j]) 

    return s_list 
+0

Vielen Dank guter Herr! Das hat mein Problem behoben. Also erweitert verkettet mit dem Wert beim Anhängen verkettet mit einer Liste des Wertes? – Cameron

+0

Gern geschehen. s_list.append (x) fügt x (es könnte eine Liste, eine ganze Zahl oder eine andere Sache sein) zu s_list hinzu. Sie können Ihren Code ändern, um Append zu verwenden, wenn Sie jedes Element einzeln und nicht als Liste einfügen, und es wird weiterhin funktionieren. –

0

Das Problem der Leitung:

Ihre Funktion wie folgt sein sollte

s_list.append([j] * helper_list[j]) 

Dies sagt eine Liste ([j]*helper_list[j]) zu s_list anhängen, und fügte hinzu, dass die Liste als neue Element oder s_list.

Stattdessen möchten Sie eine Liste auf dem anderen hinzufügen, die wie so getan werden kann:

s_list.append += ([j] * helper_list[j]) 
Verwandte Themen