2015-07-10 15 views
9

tôi muốn chỉ định một chuỗi các số nguyên lớn (với nhiều số không) như:Làm cách nào để chỉ định các chữ số nguyên lớn theo cách dễ đọc?

a = [1e13, 1e14, 1e19, ...] 

trực giác của tôi là sử dụng ký hiệu khoa học. Nhưng trong python, nó là một phao thay vì số nguyên. Có một cách dễ dàng trong python để viết các chữ số nguyên mà không cần viết tất cả các số không, bởi vì đảm bảo số lượng số không chính xác là một cơn ác mộng.

Tôi tin rằng tôi có thể truyền phao trở lại số nguyên bằng cách sử dụng int, nhưng chỉ cần tự hỏi nếu có cách nào tốt hơn?

+3

'a = [10 ** 13, 10 ** 14, 10 ** 19]' có phù hợp với bạn không? – thefourtheye

+1

Không có cách nào ngắn gọn để chỉ định các chữ số nguyên thập phân lớn trong Python ([ngữ pháp spec] (https://docs.python.org/3/reference/lexical_analysis.html#integer-literals)). Nếu bạn may mắn, trình tối ưu hóa lổ nhìn trộm của CPython sẽ thay thế '10 ** 13' bằng' 10000000000000' tại thời gian biên dịch. –

+0

Hãy cẩn thận với float đó để chuyển đổi số nguyên * (nitpick: Python không có "phôi"). Nó không phải luôn luôn sẽ cung cấp cho bạn chính xác giá trị mà bạn mong đợi. Ví dụ: 'int (1e23)' cho '99999999999999991611392'. –

Trả lời

3

Sử dụng ***, nó không đẹp nhưng mang lại cho bạn kết quả phù hợp.

print(2e10) 
20000000000.0 

print(2*10**10) 
20000000000 

Bạn cũng có thể tạo ra một danh sách toàn bộ như thế này:

result = [] 
for i in range(5): 
    result.append(1*10**i) 


>>> result 
[1, 10, 100, 1000, 10000] 
0

Bạn có thể thiết lập một số hậu tố

K=1000 
M=K*K 
G=K*M 
T=K*G 
P=K*T 
E=K*P 
print 12*P 

hoặc sử dụng tên dài hơn (kg, vv).

1

Bạn có thể sử dụng dấu phân cách bằng dấu phẩy cho hàng nghìn, dưới dạng chuỗi, sau đó chuyển thành int.

import locale 
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') 
def bigint(s): 
    return locale.atoi(s) 

print bigint('1,000,000,000,000') 
0

Bạn có thể làm một cái gì đó như thế này, mà tránh phao để int vấn đề chuyển đổi và khá dễ đọc theo ý kiến ​​của tôi:

a = map(int, ['1'+'0'*13, '1'+'0'*14, '1'+'0'*19, '1'+'0'*23]) 
for value in a: 
    print(format(value, ',')) 

Output:

10,000,000,000,000 
100,000,000,000,000 
10,000,000,000,000,000,000 
100,000,000,000,000,000,000,000 
2

Đối với khán giả trong tương lai.

Vì python 3.6 PEP 515 sẽ được bao gồm.

Vì vậy, bạn có thể làm a = 1_000_000_000_000 để có thể đọc được mã tốt hơn.

Các vấn đề liên quan