###前提・実現したいこと
python3で、[A1,A2,....,A100,B1,B2...,,B100]のようなリストの数字部分でsortがしたい。つまり [A1,B2,A2,B2,...A100,B100] というリストがほしい
###発生している問題・エラーメッセージ
最初に文字と数字に分割し、数字をint型に変換しsortするというやり方をやったのですが、もっと効率のいいやり方はないでしょうか?
(また文字と数字の分割もsplitするために間に"/"を入れましたが、これももっと良い方法があれば教えてください)
###ソースコード
python
1 2#テスト用の文字列作成 3A = ["A" + str(n) for n in range(1,101)] 4B = ["B" + str(n) for n in range(1,101)] 5AB = A + B 6import random 7random.shuffle(AB) # ついでにシャッフル 8 9#シーケンスを文字と数字で分割するために文字と数字の間に "/" を挿入する 10AB_list = [] 11for ab in AB: 12 for n in range(len(ab)-1): 13 if ab[n].isalpha() and ab[n+1].isdigit(): 14 AB_list += [ab.replace(ab[n]+ab[n+1] , ab[n]+"/"+ab[n+1])] 15 16#"/"でsplitするついでに数字をintに変換する 17ab_list = [] 18for x in AB_list: 19 ab_list.append([int(y) if y.isdigit() else y for y in x.split("/")]) 20 21#ab_lintの二列目(intタイプの数字)でsort、次に文字でsortする 22hoge = sorted(ab_list,key=lambda n:(n[1],n[0])) 23 24#一列目(str)と二列目(int)をjoinで連結 25ab = ["".join(map(str,x)) for x in hoge] 26
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
使っているのはpython 3.6.2です

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。