2011-09-14 13 views
1

私は、リスト内の文字でソートしたい単語のリストを持っているのリストの中にアルファベット順に各文字を並べ替え:- 言葉

['alumni', 'orphan', 'binge', 'peanut', 'necktie'] 

は、私は、彼らが終わるだろうように、アルファベット順にこれらをソートしたかったですリストされているアップ:これまでのところ私のコードは恥ずかしい

['ailmnu', 'ahnopr', 'begin', 'aenptu', 'ceeiknt'] 

されています:

for i in range(len(splitfoo)): 
    splitedfootmp = sorted(splitfoo[i]) 

分裂しますこのような文字への言葉:['a', 'i', 'l', 'm', 'n', 'u'] が、私は['ailmnu']

に戻ってそれを有効にする方法を見つけ出すことはできませんが、すべての悩みを経由せずにこれを行うにしても仕方ですか? ありがとうございます!

In [2]: l = ['alumni', 'orphan', 'binge', 'peanut', 'necktie'] 

In [3]: map(lambda w: ''.join(sorted(w)), l) 
Out[3]: ['ailmnu', 'ahnopr', 'begin', 'aenptu', 'ceeiknt'] 

答えて

7

きれいにあなたの全体のことを行うには:ここで

4
In [1]: ''.join(['a', 'i', 'l', 'm', 'n', 'u']) 
Out[1]: 'ailmnu' 

は完全なプログラムです

ここ
items = ['alumni', 'orphan', 'binge', 'peanut', 'necktie'] 
sorted_items = ["".join(sorted(item)) for item in items] 

私は小さなスニペットを作るの素晴らしい方法ですlist comprehensionを、使用していますこのような。あなたは、あなたがしたい場合にそれを展開することができます。

items = ['alumni', 'orphan', 'binge', 'peanut', 'necktie'] 
sorted_items = [] 
for item in items: 
    sorted_items.append("".join(sorted(item))) 

しかし明確に、リストの内包は、この場合、よりよい(以上またはmap()を使用するよりも速い)ソリューションです。

このようなforループを使用するのは非常にpythonicではありません。比較:

for i in range(len(splitfoo)): 
    splitedfootmp = sorted(splitfoo[i]) 

for item in splitfoo: 
    splitedfootmp = sorted(item) 

両者は同じことをしますが、後者はより明確であり、pythonです。

0

string.join()をご覧ください。

map()機能を使用してコードを簡略化することもできます。