基数排序 python 语法

Radix sort python grammar

找到基数排序代码,但无法很好地理解“arr=[j for i in bucket_list for j in i]”行 我知道它是根据 bucket_list 排序的,但是 j, i 在这一行中是什么意思,编写这个函数的一般方法是什么?谢谢

def radix_sort(arr:List[int]):
    n = len(str(max(arr)))  
    for k in range(n):
        bucket_list=[[] for i in range(10)]
        for i in arr:
            bucket_list[i//(10**k)%10].append(i)
        arr=[j for i in bucket_list for j in i]
        print(arr)
    return arr

您询问的代码行中包含列表推导式。它相当于一个 two-level 嵌套循环:

arr = []
for i in bucket_list:
    for j in i:
        arr.append(j)

因为它是基数排序, 在任何迭代中,我们都可以有 1 个或多个相同权重的值: 以 456 和 656 为例,假设我们看到的是个位数,所以在桶中,这两个将出现在列表中,即像 [[456, 656]],即使在第二次迭代中也是 56 , 他们将进入同一个桶 [[456, 656]].

 arr=[j for i in bucket_list for j in i]

所以想要这条线,它是按照它们放置的相同顺序获取每个桶的内部元素。