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()

从此问题修改的代码。

上述代码生成 100,000 行随机文本,格式为 STRING:STRING。结果文本文件为 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 回答