【发布时间】:2010-10-21 06:59:57
【问题描述】:
下面的magic函数怎么写?
>>> num = 123
>>> lst = magic(num)
>>>
>>> print lst, type(lst)
[1, 2, 3], <type 'list'>
【问题讨论】:
-
魔术.. 提问的好方法:)。
下面的magic函数怎么写?
>>> num = 123
>>> lst = magic(num)
>>>
>>> print lst, type(lst)
[1, 2, 3], <type 'list'>
【问题讨论】:
你是说这个吗?
num = 1234
lst = [int(i) for i in str(num)]
【讨论】:
a = 123456
b = str(a)
c = []
for digit in b:
c.append (int(digit))
print c
【讨论】:
你可以这样做:
>>> num = 123
>>> lst = map(int, str(num))
>>> lst, type(lst)
([1, 2, 3], <type 'list'>)
【讨论】:
magic = lambda num: map(int, str(num))
那就做吧
magic(12345)
或
magic(someInt) #or whatever
【讨论】:
>>> 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)]
时间安排:
magic
>>> 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
【讨论】:
map(int, str(n)) 比两者都快(在 Python3 上测试)
map 在 python 3 中只会创建一个生成器,而不是 list。你需要list(map(int, str(n))。 map(int, str(n)) 自己几乎什么都不做。
不要使用list这个词作为变量名!它是python内置数据类型的名称。
另外,请澄清您的问题。如果您正在寻找一种方法来创建一个成员列表,请执行以下操作:
a = 123
my_list = [a]
和“pythonizing” Cannonade 的答案:
a = 123
my_list = [int(d) for d in str(a)]
【讨论】:
num = map(int, list(str(num)))
【讨论】:
如果被命名为魔法,为什么不直接使用魔法:
def magic(x):
if x < 10:
return [x]
else:
return magic(x//10) + [x%10]
【讨论】:
对于 python 3.x:
num = 1234
lst = list(map(int, str(num)))
【讨论】:
你可以试试这个:
def convert_to_list(number):
return list(map(lambda x: int(x), str(number)))
convert_to_list(1245)
【讨论】:
只需使用:
a= str (num)
lst = list(a)
【讨论】: