2017-10-05 7 views
1
def selection(alist): 
    sorted_list = [] 
    while alist: 
     minimum = alist.pop(alist.index(min(alist))) 
     sorted_list.append(minimum) 
    print(sorted_list) 
    return sorted_list 

a = [54,35,23,86,3546,87,43,7,2] 
selection(a) 
print(selection(a)) 
+0

実行しているものに合わせてインデントを更新できますか?それが間違って入力されたのか、インデントが問題の一部であるのかを判断するのは難しいです。 – ryachza

+0

2回目の呼び出し時に関数を2回呼び出すので、 'a'はすでに空です。各関数呼び出しに対して 'a'のコピーを作成するか、' section'を一度しか呼び出しません。 –

+2

あなたは、リストを変更して、最小の要素を順番に「ポップ」しています。これは**信じられないほど非効率的なものですが、とにかくあなたが何を記述しているのかがはっきりしていませんが、 'a(selection)(a)'を2度目に呼び出すと 'a'が空になりますリスト。 –

答えて

0

変数に関数呼び出しを代入してみてください。これにより、データを保存し、必要なときにデータを呼び出すことができます。

def selection(alist): 
    sorted_list = [] 
    while alist: 
     minimum = alist.pop(alist.index(min(alist))) 
     sorted_list.append(minimum) 
    print(sorted_list) 
    return sorted_list 

a = [54,35,23,86,3546,87,43,7,2] 
value = selection(a) 
print(value) 
0

selectionaのすべての値を飛び出しているので、それは起こっています。 aをそのまま使用したい場合は、一時的な配列に複製し、この配列のみを操作する必要があります。

def selection(alist): 
    temp = list(alist) 
    sorted_list = [] 
    while temp: 
     minimum = temp.pop(temp.index(min(temp))) 
     sorted_list.append(minimum) 
    return sorted_list 

はその後aは同じまま:あなたの目標は、この配列をソートするだけで、あなたがyourslefによってソートアルゴリズムを書いていないために気にしない

>>> selection(a) 
[2, 7, 23, 35, 43, 54, 86, 87, 3546] 
>>> print(selection(a)) 
[2, 7, 23, 35, 43, 54, 86, 87, 3546] 
>>> a 
[54, 35, 23, 86, 3546, 87, 43, 7, 2] 

場合、それはおそらく良いだろうアイデア(とはるかに効率的)のpythonの組み込みsorted機能を使用するには:あなたは永久にソートしたい場合は

>>> a = [54,35,23,86,3546,87,43,7,2] 
>>> sorted(a) 
[2, 7, 23, 35, 43, 54, 86, 87, 3546] 
>>> a 
[54, 35, 23, 86, 3546, 87, 43, 7, 2] 

を0使用a.sort()

>>> a = [54,35,23,86,3546,87,43,7,2] 
>>> a.sort() 
>>> a 
[2, 7, 23, 35, 43, 54, 86, 87, 3546] 
+0

Woops、bad indention - 固定:)ありがとう! – Megabeets

関連する問題