我有一些我覺得笨拙的代碼。使用python中的整數值對字符串排序
考慮:
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
中的所有數字都是連續的整數,如果有幫助的話。
目前,最Python的/簡潔的方式我能想到這樣做的是:
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]
有沒有更好的辦法?我覺得這很笨拙。這裏的問題是用字符串排序,我需要將它們逐個轉換爲整數。預感會是一些lambda函數,但我對這種語法並不十分精通。如果這是最好的方法,我仍然很好奇如何使用lambda函數來做到這一點,如果可能的話。
注意,直接字符串比較一行代碼:
print zip(*sorted(sample_lists[0]+sample_lists[1], key=operator.itemgetter(0)))[1]
不行的,因爲它不能當sample_lists含有「11」或「20」。
python 3答案沒問題,但是Python 2.7是首選。
什麼是使用chain.from_iterable而不是sample_lists的優勢[0] + sample_lists [1]? – JDong
@JDong,如果sample_lists有兩個以上的元素呢? –