Python,在不使用.sort()的情况下排列列表中的列表

时间:2014-04-04 16:55:22

标签: python list sorting merge

让我们说

def arrange(Lists, type):
    '''your code'''

鉴于:

Lists = [[['q', 'Leap Strike', 'Jax'],['w', 'Mocking shout', 'Tryndamere']],[['r', 'Ace in hole', 'Caitlyn']...[button, description, name]]]

还有:

type can be button, description or name

查找

arrange(Lists, name)

预期产出:

[['r', 'Ace in hole', 'Caitlyn'],['q', 'Leap Strike', 'Jax'],['w', 'Mocking shout', 'Tryndamere']...]]

我的方法:

def arrange(Lists, type):
    result = []
    for list in lists:
        result += list

当前输出:

[['q', 'Leap Strike', 'Jax'],['w', 'Mocking shout', 'Tryndamere'],['r', 'Ace in hole', 'Caitlyn']...]]

直到这里,我将所有列表加入到新列表中。下一步是根据类型对列表进行排序。我怎样才能做到这一点?不使用.sort或排序

2 个答案:

答案 0 :(得分:1)

from operator import itemgetter

def arrange(lst, column_name, columns=["number", "code", "name"]):
    item = columns.index(column_name)
    return sorted(lst, key=itemgetter(item))

一样运行
lst = [('C98124', 'book1', 'Shawn'), ('D12345', 'book2', 'James')]

arrange(lst, "name")

并返回

[('D12345', 'book2', 'James'), ('C98124', 'book1', 'Shawn')]

('Shawn'之前的'James',正如预期的那样)

...用适当的操作替换sorted

答案 1 :(得分:0)

def my_sort(a_list):
    changes_exist = True
    while changes_exist:
         changes_exist = False
         for i in range(len(a_list)-1):
             if a_list[i] > a_list[i+1]:
                a_list = do_swap(a_list,i,i+1)
                changes_exist = True
    return a_list

可能是最简单的排序算法(用适当的功能替换do_swap)并改变搜索比较以满足您的特定需求