3

これは効率に基づくものではなく、Python の非常に基本的な知識 (文字列、タプル、リストの基本) のみで実行する必要があるため、関数のインポートやソート/ソートの使用は必要ありません。(これは Python 2.7.3 を使用しています)。

たとえば、リストがあります:

unsort_list = ["B", "D", "A", "E", "C"]
sort_list = []

sort_list は出力できる必要があります:

"A, B, C, D, E"

私は数字/整数でそれを行うことができます.アルファベット順の文字列に同様の方法はありますか? そうでない場合は、インポートまたはソート機能なしで(効率的でなくても)何をお勧めしますか。

4

11 に答える 11

2

以下は、Python でのクイックソートアルゴリズムの非常に短い実装です。

def quicksort(lst):
    if not lst:
        return []
    return (quicksort([x for x in lst[1:] if x <  lst[0]])
            + [lst[0]] +
            quicksort([x for x in lst[1:] if x >= lst[0]]))

これはおもちゃの実装であり、理解しやすいですが、実際には非効率的すぎて役に立ちません。これは、ソートの問題に対する解決策を関数型プログラミング スタイルで簡潔に記述する方法を示すための学術的な演習として意図されています。特に質問の例では、同等のオブジェクトのリストで機能します。

unsort_list = ['B', 'D', 'A', 'E', 'C']
sort_list   = quicksort(unsort_list)

sort_list
> ['A', 'B', 'C', 'D', 'E']
于 2012-10-27T15:37:25.800 に答える
1

楽しみのために:

from random import shuffle
unsorted_list = ["B", "D", "A", "E", "C"]

def is_sorted(iterable):
  for a1,a2 in zip(iterable, iterable[1:]):
     if a1 > a2: return False
  return True

sorted_list = unsorted_list
while True:
   shuffle(sorted_list)
   if is_sorted(sorted_list): break

平均的な複雑さは階乗であり、最悪の場合は無限でなければなりません

于 2012-10-27T16:19:48.833 に答える
0

さらに簡単:

dc = { }
for a in unsorted_list:
  dc[a] = '1'

sorted_list = dc.keys()
于 2012-10-27T15:48:01.243 に答える
0

list_val=['c','d','e','a','r']

for passnum in range(len(list_val)-1, 0, -1):
  for i in range(passnum):
    if list_val[i] > list_val[i+1]:
      list_val[i], list_val[i+1] = list_val[i+1], list_val[i]

list_val を出力

于 2016-09-09T20:02:32.340 に答える
0
u = ["B", "D", "A", "E", "C"]
y=[]
count=65
while len(y)<len(u):
    for i in u:
        if ord(i)==count:
            y.append(i)
            count+=1
print(y)
于 2012-10-27T16:26:43.873 に答える
0

これは、min()組み込みメソッドとlistオブジェクト メソッドのみを使用します。

unsort_list = ["B", "D", "A", "E", "C"]
sort_list = []

while unsort_list:
    smallest = min(unsort_list)
    sort_list.append(smallest)
    unsort_list.pop(unsort_list.index(smallest))

print sort_list

ソートされていないリストが破棄されるため、コピーを作成して使用することをお勧めします。

于 2012-10-27T20:40:58.427 に答える
0
def quicksort(lst):
    if not lst:
        return []
    return (quicksort([x for x in lst[1:] if x <  lst[0]])
            + [lst[0]] +
            quicksort([x for x in lst[1:] if x >= lst[0]]))
unsort_list = ['B', 'D', 'A', 'E', 'C']
sort_list   = quicksort(unsort_list)

並べ替えリスト

['A'、'B'、'C'、'D'、'E']

于 2020-01-11T03:37:22.520 に答える