2016-11-03 9 views
0

Недавно я начал практиковать функциональное программирование на python.Функция разворачивания в python

Допустим, я определить функцию, которая получает массив из цифр и сцепляет его:

In [1]: def fromDigits(digits): 
    ...:  return reduce(lambda x,y: 10*x+y,digits,0) 
    ...: 

In [2]: fromDigits([1,2,3,4,5]) 
Out[2]: 12345 

Теперь я хочу, чтобы реализовать функцию реверса:

def toDigits(num): 
    return unfold(lambda m,digits: (m/10,digits+[m % 10]) if m>0 else None, num, []) 

Но я не мог найти определение unfold в python functools или где-нибудь в стандартной библиотеке.

+1

Написать его, затем. У Python нет встроенного. – user2357112

ответ

2

разворачиваться не является функция питона ... вот рекурсивное решение ...

def to_digits(x): 
    if not x: return [] 
    return to_digits(x//10) + [x%10] 

to_digits(12345) 
0

Это не использует lambda, он использует список понимание:

def to_digits(x): 
    return [int(i) for i in str(x)] 

str(x) является iterable с строковой версией x, и понимание списка превращает ее в список целых чисел (следовательно, int(i)).

+0

'iter (str (x))' является излишним. –

+1

И в то время как 'list (str (x))' действительно возвращает итерабельность, список, который будет точным, просто 'str (x)' уже итерабелен. –

+0

Спасибо @ juanpa.arrivillaga – boboquack

1

Для функционального программирования вы можете использовать map в python. Один пример: map(lambda a, b: a+b, [1,2,3], [2,3,4]) который вернет [3, 5, 7].

В вашем случае, вы можете сделать:

def toDigits(num): 
    return map(int, str(num))