Я пытаюсь написать функцию Python для сортировки списка чисел в список списков чисел, где каждый подсписок содержит только числа, которые имеют сумму цифр индекса подсписка в большем списке.
Так, например, для всех чисел от 1 до 25 должен получиться список таких списков:
[[], [1, 10], [2, 11, 20], [3, 12, 21], [4, 13, 22], [5, 14, 23], [6, 15, 24], [7, 16], [8, 17], [9, 18], [19]]
У меня пока есть следующий код:
def digit_sum(integer_data_type):
int_string = str(integer_data_type)
sum = 0
for digits in int_string:
sum += int(digits)
return sum
def organize_by_digit_sum(integer_list):
integer_list.sort()
max_ds = 9*len(str(max(integer_list)))+1
list_of_lists = []
current_ds = 0
while current_ds <= max_ds:
current_list = []
for n in integer_list:
if digit_sum(n) == current_ds:
current_list.append(n)
list_of_lists.append(current_list)
current_ds += 1
return list_of_lists
Очевидно, что это неэффективно, потому что приходится перебирать весь список целых чисел снова и снова для каждой суммы цифр от 0 до максимальной суммы цифр.
Кроме того, изначально предполагается, что максимальная сумма цифр в 9 раз превышает длину максимального целого числа. Чтобы было ясно, я хочу всегда иметь подсписок для возможной нулевой суммы цифр, чтобы я мог ссылаться на подсписок определенной суммы цифр по индексу списка списков.
Я хочу, чтобы функция перебирала каждое целое число в списке ровно один раз и добавляла его в правильный подсписок.
Буду признателен за любую помощь или информацию по этому поводу.