如何在Python3中使用冒泡排序对列表进行排序,然后再进行子排序

如何在Python3中使用冒泡排序对列表进行排序,然后再进行子排序,python,arrays,sorting,Python,Arrays,Sorting,我正在为我正在学习的课程准备一个奖金问题。假设我们有一个列表,比如mylist=[a1、b2、a3、c1、b1、a5、b3、c9]。我想使用基本Python而不导入任何内容。我想先按字母顺序对列表进行排序,然后按数字对每个字母进行排序。因此,结果将是列表[a1、a3、a5、b1、b2、b3、c1、c9]。我正在为数字实现一个简单的冒泡排序,但是如何对字母进行子排序(或者,也许反之亦然?使用排序或列表。使用两个键进行排序: my_list = ["a1", "b2", "a3", "c1", "b

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

使用
排序
列表。使用两个键进行排序

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']

试试这个:

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”之前),这将不会排序。我喜欢它!它缺乏前面答案的简洁性,但对于像我这样的noob来说更容易理解。我喜欢这个答案的简洁性,也许还有优雅。虽然简洁往往会牺牲清晰度。