2009-04-23 8 views

Trả lời

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

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

print c 
+18

Tất cả những gì còn thiếu là một số dấu ngoặc nhọn! ;) –

+5

. Bạn đã khám phá ra bí mật đen tối của tôi (C++). Tôi khiêm nhường bởi những người trả lời cao cấp khác. – RedBlueThing

+2

Quay lại câu trả lời này nhiều năm sau và sau khi làm việc bằng Python trong một thời gian. Đây là một trong những yêu thích của tôi -> [int (x) cho x trong str (a)] mà sẽ xảy ra là câu trả lời của @ BjornTipling :) – RedBlueThing

64

Ý của bạn là gì?

num = 1234 
lst = [int(i) for i in str(num)] 
13

Bạn có thể làm điều này:

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

Lưu ý rằng trong bản đồ Python 3.0 sẽ trả về một trình tạo, không phải danh sách. – Stephan202

5

Đừng dùng từ danh sách như tên biến! Nó là tên của python được xây dựng trong kiểu dữ liệu.

Ngoài ra, vui lòng làm rõ câu hỏi của bạn. Nếu bạn đang tìm kiếm một cách để tạo ra một danh sách một thành viên, làm như sau:

a = 123 
my_list = [a] 

và "pythonizing" Cannonade của câu trả lời:

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

Tôi thích nó khi tôi nhận được pythonized. Tôi cảm thấy khá bây giờ. : P – RedBlueThing

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

sau đó chỉ cần làm

magic(12345) 

hoặc

magic(someInt) #or whatever 
+0

Bởi GOD đó là tuyệt vời. – franklin

0

Chỉ cần sử dụng:

a= str (num) 
lst = list(a) 
+0

sẽ trả về danh sách các ký tự, không phải * trực tiếp * số nguyên –

6
>>> 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] 

Theo timings của tôi, giải pháp này là nhanh hơn đáng kể so với phương pháp chuỗi (magic2), ngay cả đối với những ví dụ nhỏ.

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

Thời gian:

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 
+0

Đây là câu trả lời hữu ích hơn. – spider

+0

'map (int, str (n))' từ câu trả lời của @Wilbeibi nhanh hơn cả hai (được thử nghiệm trên Python3) –

+0

@FelipeBuccioni 'map' trong python 3 sẽ chỉ tạo một trình tạo, không phải là' danh sách'. Bạn cần 'danh sách (bản đồ (int, str (n))'. 'Map (int, str (n))' hiện khá nhiều không có gì của chính nó. – jamylak

1

Nếu nó được đặt tên như ma thuật, tại sao không chỉ sử dụng phép thuật:

def magic(x): 
    if x < 10: 
     return [x] 
    else: 
     return magic(x//10) + [x%10]