Radix sort python грамматика - PullRequest
       92

Radix sort python грамматика

1 голос
/ 06 августа 2020

Найти код сортировки по основанию, но не смог хорошо понять строку "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

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Так как это сортировка по основанию, в любой итерации мы можем иметь 1 или несколько значений с одинаковым весом: возьмем пример 456 и 656, допустим, мы видим единицу di git, поэтому в ведрах , эти двое будут попадать в список, то есть как [[456, 656]], даже во второй итерации, поскольку оба они имеют 56, они попадут в одну и ту же корзину [[456, 656]].

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

То, что нужно этой строке, - это то, что она принимает внутренние элементы каждой корзины в том же порядке, в котором они размещены.

0 голосов
/ 06 августа 2020

Строка кода, о которой вы спрашиваете, содержит понимание списка. Это эквивалентно двухуровневому вложенному l oop:

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