我有一些我觉得笨拙的代码。
鉴于:
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]
有没有更好的办法?我觉得这很笨拙。这里的问题是按字符串排序,我需要将其一一转换为整数。预感会是一些 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 是首选。