将一个数字转换为整数列表

38

我该如何编写下面这个magic函数?

>>> num = 123
>>> lst = magic(num)
>>>
>>> print lst, type(lst)
[1, 2, 3], <type 'list'>

2
魔法...很好的提问方式 :)。 - Vandit Shah
11个回答

82
你的意思是这个吗?
num = 1234
lst = [int(i) for i in str(num)]

24
a = 123456
b = str(a)
c = []

for digit in b:
    c.append (int(digit))

print c

16

你可以这样做:

>>> num = 123
>>> lst = map(int, str(num))
>>> lst, type(lst)
([1, 2, 3], <type 'list'>)

5
请注意,在Python 3.0中,map函数将返回一个生成器而非列表。 - Stephan202

11
magic = lambda num: map(int, str(num))

那就这么做

magic(12345) 
或者
magic(someInt) #or whatever

10
>>> from collections import deque
>>> def magic(num):
        digits = deque()
        while True:
            num,r = divmod(num,10)
            digits.appendleft(r)
            if num == 0:
                break
        return list(digits)

>>> magic(123)
[1, 2, 3]

根据我的时间记录,这个解决方案比字符串方法(magic2)要快得多,即使是对于更小的示例也是如此。

>>> def magic2(num):
        return [int(i) for i in str(num)]

时间:

魔术

>>> timeit.timeit(setup='from __main__ import magic', stmt='magic(123)')
1.3874572762508706
>>> timeit.timeit(setup='from __main__ import magic', stmt='magic(999999999)')
3.2624468999981673

magic2

>>> timeit.timeit(setup='from __main__ import magic2', stmt='magic2(123)')
3.693756106896217    
>>> timeit.timeit(setup='from __main__ import magic2', stmt='magic2(999999999)')
10.485281719412114

@Wilbeibi的答案中的map(int, str(n))比两者都快(在Python3上测试过)。 - Felipe Buccioni
@FelipeBuccioni 在Python 3中,map只会创建一个生成器,而不是一个列表。你需要使用list(map(int, str(n))map(int, str(n))本身几乎什么也不做。 - jamylak

6

不要使用单词list作为变量名!它是Python内置数据类型的名称。

另外,请澄清您的问题。如果您正在寻找创建一个只有一个成员的列表的方法,请执行以下操作:

a = 123
my_list = [a]

并且“pythonizing” Cannonade的回答:

a = 123
my_list = [int(d) for d in str(a)]

3
num = map(int, list(str(num)))

3
如果它被称为魔法,为什么不直接使用魔法呢?
def magic(x):
    if x < 10:
        return [x]
    else:
        return magic(x//10) + [x%10]

1

针对 Python 3.x:

num = 1234
lst = list(map(int, str(num)))

0

你可以尝试这个:

def convert_to_list(number):
    return list(map(lambda x: int(x), str(number)))

convert_to_list(1245)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接