不器用だと思うコードがいくつかあります。
与えられた:
sample_lists = [(u'1', u'penguin'), (u'2', u'kelp'), (u'5', u'egg')],
[(u'3', u'otter'), (u'4', u'clam')]
結果が欲しい:(['penguin', 'kelp', 'otter', 'clam', 'egg']
番号順)。リストには常に が含まれており'1'
、各サブリストは昇順であり、すべての数字sample_lists
は連続した整数であると想定できます。
現在、これを行うと考えることができる最もpythonic/簡潔な方法は次のとおりです。
sample_list = sample_lists[0]+sample_lists[1]
for i in xrange(len(sample_list)):
sample_list[0] = i+1
return zip(*sorted(sample_list, key=operator.itemgetter(0)))[1]
より良い方法はありますか?これはかなりやばい気がします。ここでの問題は、文字列による並べ替えです。文字列を 1 つずつ int に変換する必要があります。予感はラムダ関数ですが、私はその構文にあまり精通していません。これが最善の方法である場合、可能であれば、ラムダ関数を使用してこれを行う方法についてまだ興味があります。
直接文字列比較のワンライナーに注意してください。
print zip(*sorted(sample_lists[0]+sample_lists[1], key=operator.itemgetter(0)))[1]
sample_lists に「11」または「20」が含まれていると失敗するため、機能しません。
Python 3 の回答で問題ありませんが、Python 2.7 が推奨されます。