2017-01-28 14 views
0

私はPythonでいくつかのソートアルゴリズムを教えようとしていますが、出力に少し問題があります。私は、計数ソートアルゴリズムを実装しようとしていると私はこれまでのところ得ている:カウントソートアルゴリズムを実装する際の問題

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 

すべてがほとんど罰金を行っているが、私は、このような[5, 2, 2, 3, 1, 2]として入力を与えるとき。

出力は[[], [1], [2, 2, 2], [3], [5]]です。

答えて

1

「延長」の「追加」を変更するだけで済みます。 append関数は、リストに要素を追加します(この場合は別のリスト)。 extend関数は、あなたのリストをパラメータとして与えられたものと連結します。

あなたの関数は、次のようにする必要があります:

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

はあなたに良い先生ありがとうございました!これは私の問題を解決しました。したがって、値のリストを連結して追加する間に、値との連結を拡張しますか? – Cameron

+0

ようこそ。 s_list.append(x)はx(s_listにリスト、整数など)を追加します。それぞれの要素をリストではなく個別に挿入すると、appendを使用するようにコードを変更することができます。 –

0

問題はラインです:

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

これは新しいとしてそのリストを追加し、s_listにリスト([j]*helper_list[j])を追加すると言います要素またはs_list

代わりに、あなたはそうのように行うことができ、他に1つのリストを追加します:

s_list.append += ([j] * helper_list[j]) 
関連する問題