2016-09-29 6 views

答えて

3

ます必要な数字を分割し、私は本当に、その最良の答えはないと思うint

ss = ['comm_1_1.txt', 'comm_1_10.txt', 'comm_1_11.txt', 'comm_1_4.txt', 'comm_1_5.txt', 'comm_1_6.txt'] 

def numeric(i): 
    return tuple(map(int, i.replace('.txt', '').split('_')[1:])) 

sorted(ss, key=numeric) 
# ['comm_1_1.txt', 'comm_1_4.txt', 'comm_1_5.txt', 'comm_1_6.txt', 'comm_1_10.txt', 'comm_1_11.txt'] 
1

に変換しますが、あなたのことができなければなりません やってみて。 「人間のソート」のこの種のために使用さ

l = ['comm_1_1.txt', 'comm_1_10.txt', 'comm_1_11.txt', 'comm_1_4.txt', 'comm_1_5.txt', 'comm_1_6.txt'] 

d = {} 

for i in l: 
    filen = i.split('.') 
    key = filen[0].split('_') 
    d[int(key[2])] = i 

for key in sorted(d): 
     print(d[key]) 
2

一つの技術は、タプルへの鍵を分割し、実際の数値に、数値部分を変換することです:

ss = ['comm_1_1.txt', 'comm_1_10.txt', 'comm_1_11.txt', 'comm_1_4.txt', 'comm_1_5.txt', 'comm_1_6.txt'] 

print(sorted(ss, key=lambda x : map((lambda v: int(v) if "0" <= v[0] <= "9" else v), re.findall("[0-9]+|[^0-9]+", x)))) 

または、より読み

def sortval(x): 
    if "0" <= x <= "9": 
     return int(x) 
    else: 
     return x 

def human_sort_key(x): 
    return map(sortval, re.findall("[0-9]+|[^0-9]+", x)) 

print sorted(ss, key=human_sort_key) 

考え方は、数字部分と非数字部分を分割し、数字部分を実際の数字に変換した後にリストに入れることです(10がの後にくるようにします)。)。

リストを辞書的にソートすると、期待される結果が得られます。

関連する問題