5
#!/usr/bin/python

import random
import string

appendToFile = open("appendedFile", "a" )

# Generator

for i in range(1, 100000):

    chars = "".join( [random.choice(string.letters) for i in xrange(15)] )
    chars2 = "".join( [random.choice(string.letters) for i in xrange(15)] )

    appendToFile.write(chars + ":" + chars2 + "\n")

appendToFile.close()

この質問から変更されたコード。

上記のコードは、STRING:STRING の形式で 100,000 行のランダム テキストを生成します。結果のテキスト ファイルは 3.1 MB です。

STRING:STRING の最初の STRING を使用して、ファイルをすばやくアルファベット順に並べ替えるにはどうすればよいでしょうか? 大文字と小文字は関係ありません。

バブルソートは非常に遅いですよね?

4

3 に答える 3

8

明らかな最初のアプローチは、Python に組み込まれている並べ替え機能を使用することです。これはあなたが考えていたことではありませんか?そうでない場合、なぜですか?ランダム テキストが 100,000 行しかない場合、組み込みの並べ替えは非常に高速です。

lst = open("appendedFile", "rt").readlines()
lst.sort(key=str.lower)

終わり。あなたが本当にしたいのであれば、ワンライナーとしてそれを行うことができます:

lst = sorted(open("appendedFile", "rt").readlines(), key=str.lower)

編集:チェックしたところ、strings.letters大文字と小文字の両方が含まれています。そのため、上記のコードは大文字と小文字を区別しないように変更されています。

編集: Python での並べ替えの詳細: http://wiki.python.org/moin/HowTo/Sorting

于 2009-12-08T23:15:12.997 に答える
5

これは非常に高速です (私のコンピューターでは 1 秒未満)。大文字と小文字を区別しないソートを使用していますが、これは「大文字と小文字は無関係」という意味ですか?

#!/usr/bin/python

appendToFile = open("appendedFile", "r")
sortToFile = open("sortedFile", "w")

for line in sorted(appendToFile, key = str.lower):
    sortToFile.write(line)
于 2009-12-08T23:20:50.090 に答える
1

これを試してください(大文字と小文字を区別しません):

l=file(appendedFile).readlines()
l.sort(key=lambda x:x.lower())

これらの種類のサイズでは、最適化は実際には必要ありません (遅いマシンでのタイミング ;-):

christophe@orion:~$ time python -c "l=file('appendedFile').readlines();l.sort(key=lambda x:x.lower())"

real    0m0.615s
user    0m0.576s
sys 0m0.024s
于 2009-12-08T23:20:49.623 に答える