【问题标题】:How to do a sort and then a subsort on a list in Python 3 using a bubble sort如何使用冒泡排序在 Python 3 中对列表进行排序和子排序
【发布时间】:2019-07-21 20:48:43
【问题描述】:

我正在为我正在学习的一门课程做一个额外的问题。假设我们有一个列表,例如mylist=[a1, b2, a3, c1, b1, a5, b3, c9]。我想使用基本的 Python 而不导入任何东西。我想首先按字母顺序对列表进行排序,然后对于每个字母,我按数字排序。因此,结果将是列表 [a1, a3, a5, b1, b2, b3, c1, c9]。我正在为数字实现一个简单的冒泡排序,但是如何对字母进行子排序(或者,反之亦然?)

【问题讨论】:

    标签: python arrays sorting


    【解决方案1】:

    sortedlist.sort 与两个键一起使用:

    my_list = ["a1", "b2", "a3", "c1", "b1", "a5", "b3", "c9"]
    sorted(my_list, key=lambda x:(x[0], int(x[1:])))
    # ['a1', 'a3', 'a5', 'b1', 'b2', 'b3', 'c1', 'c9']
    

    【讨论】:

    • 我喜欢它的简洁,也许还有它的优雅。虽然通常简洁会牺牲清晰度。
    【解决方案2】:

    试试这个:

    mylist=["a20", "b2", "a1", "c1", "b1", "a10", "b3", "c9"]
    sorted_list=[]
    def fun(l):
        minn = l[0]
        for i in l:
            if i[0]<minn[0]:
                minn = i
            elif i[0] == minn[0]:
                if int(i[1:])<int(minn[1:]):
                    minn = i
        l.remove(minn)
        return minn
    
    for i in range(len(mylist)):
        sorted_list.append(fun(mylist))
    print(sorted_list)
    

    结果:

    ['a1', 'a10', 'a20', 'b1', 'b2', 'b3', 'c1', 'c9']
    

    【讨论】:

    • 如果有两个或多个数字,则不会排序(即“a10”将位于“a2”之前)
    • 我喜欢!它缺乏上一个答案的简洁性,但对于像我这样的菜鸟来说更容易理解。
    猜你喜欢
    • 1970-01-01
    • 2013-10-31
    • 2017-09-27
    • 2014-03-13
    • 2016-01-01
    • 2016-07-25
    • 1970-01-01
    • 2019-05-10
    • 2018-05-03
    相关资源
    最近更新 更多