Разбить число и вывести из функции результат избежав двухмерного массива

Задача создать функцию, которая разбивает любое число на однозначные числа.

Вроде получилось, но не могу догнать, как избежать двухмерного массива в итоге в переменной z и вывести из функции по нормальному, чтобы потом было проще с этими числами работать. Обе функции должны остаться для дальнейшего кода, т.е. razbiv передает в переменную z из persistence результат.

Мой код:

def persistence(n):
    z = []
    def razbiv(n):
        x = [int(a) for a in str(n)]
        c = z.append(x)
    razbiv(n)

    return print(z)
persistence(39)

Выдает:

[[3, 9]]


В допоолнение подскажите, как можно вообще избежать массива?


Ответы (3 шт):

Автор решения: ZxNuClear

В вашей функции переменная x уже принимает список, который вам необходим, а далее вы берете и методом .append добавляете его в другой пустой список z, тем самым создавая вложенный список, от которого и пытаетесь избавиться. Для вашей задачи будет достаточно такой функции:

def persistence(n):
  lst = [int(i) for i in str(n)]
  return lst

Данная функция принимает на вход число (например 467), а на выходе возвращает готовый список [4, 6, 7], который вы и можете использовать дальше в своем коде. Как пример, можете присвоить его переменной и далее работать уже с ней:

z = persistence(input('Введи любое число: '))

print(z)

Вывод:

Введи любое число: 16546

[1, 6, 5, 4, 6]

Если вам прям так хочется явно объявить переменную z, то выносите делайте ее глобальной, объявив ее вне функции, а внутри функции уже переписывайте ее:

z = []

def persistence(n):
  global z
  z = [int(i) for i in str(n)]
  return z

persistence(123)

print(z)

Вывод:

[1, 2, 3]

→ Ссылка
Автор решения: MaHryCT

z Уже является массивом. Следовательно вызвав функцию append ты добавляешь в массив z переменную x, которая в свою очередь тоже массив, созданным с помощью list comprehension.

def persistence(n):
    x = [int(a) for a in str(n)]
    return print(x)
persistence(39)
→ Ссылка
Автор решения: CrazyElf

Вообще это обычно как-то так делается:

def razbiv(n):
    return list(map(int, str(n)))

def persistence(n):
    z = razbiv(n)
    return print(z)

persistence(39)

Вывод:

[3, 9]

Но учтите, что фактически persistence у вас возвращает None.

→ Ссылка