您必須首先將數字轉換爲int。要做很長的路要求將名稱分解爲字符串和數字,將數字轉換爲整數並進行排序。也許別人有更短或更有效的方法。
def split_in_two(str_in):
## go from right to left until a letter is found
## assume first letter of name is not a digit
for ctr in range(len(str_in)-1, 0, -1):
if not str_in[ctr].isdigit():
return str_in[:ctr+1], str_in[ctr+1:] ## ctr+1 = first digit
## default for no letters found
return str_in, "0"
files=['apple1.dat', 'apple2.dat', 'apple10.dat', 'apple11.dat',
'banana1.dat', 'banana10.dat', 'banana2.dat']
print sorted(files) ## sorted as you say
sort_numbers = []
for f in files:
## split off '.dat.
no_ending = f[:-4]
str_1, str_2 = split_in_two(no_ending)
sort_numbers.append([str_1, int(str_2), ".dat"])
sort_numbers.sort()
print sort_numbers
來源
2012-08-14 17:00:45
JOe
如果你讓我們知道你已經嘗試了什麼,它會有幫助,所以我們可以避免在答案中討論。當你做了你所做的事情時,你遇到了什麼問題等。 – 2012-08-14 13:56:17
請記住,通常排序的自然順序文件是使用ASCII值的字母,它們將放置'apple1.dat'後面的'apple10.dat',但_before_'apple2.dat'。 – 2012-08-14 13:57:39
您複製了我的答案,但您忘記使用sorted()函數對文件列表進行排序 – juankysmith 2012-08-14 14:13:53