2009-02-05 44 views
24

tôi muốn làm một cái gì đó giống như String.Format("[{0}, {1}, {2}]", 1, 2, 3) trả về:Chuỗi định dạng bằng Python

[1, 2, 3] 

Làm thế nào để làm điều này trong Python?

+0

trong [python 3.6 +] (https : //docs.python.org/3/whatsnew/3.6.html#pep-498-formatted-string-literals) bạn có thể sử dụng 'f '[{1}, {2}, {3}]" ' – Soorena

Trả lời

55

những câu trả lời trước đó có sử dụng định dạng d%, đang được loại bỏ trong Python 3.0+. Giả sử bạn đang sử dụng Python 2.6+, một hệ thống định dạng tương lai thêm bằng chứng được mô tả ở đây:

http://docs.python.org/library/string.html#formatstrings

Mặc dù có những tính năng cao cấp hơn là tốt, hình thức đơn giản nhất kết thúc lên tim rất gần với những gì bạn đã viết :

>>> "[{0}, {1}, {2}]".format(1, 2, 3) 
[1, 2, 3] 
+16

Ngoài ra, trong Python 3.1, không cần phải xác định các số thứ tự. "[{}, {}, {}]". Định dạng (1, 2, 3) –

+7

Các số thứ tự cũng là tùy chọn trong Python 2.7 –

+0

Bạn có tham chiếu có tài liệu nào định dạng% đang được loại bỏ trong Python 3.0+ hay không ? Nó vẫn còn trong 3.3 - xem http://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting - và trong khi các tài liệu nói rằng phương thức 'format' mới hơn được ưa thích, nó không ' t nói rằng toán tử% đang được loại bỏ. – Day

2

Bạn chưa xây dựng cho mình rất commendably, nhưng tôi sẽ liên đoán đây là những gì bạn đang tìm kiếm:

foo = "Hello" 
bar = "world" 
baz = 2 
print "%s, %s number %d" % (foo, bar, baz) 
+0

Cảm ơn,% cuối cùng có nghĩa là gì? Ngoài ra bạn có phải viết các loại cách nó nên được in như trong C + + với s, d, f, vv? –

+0

Tôi sẽ giới thiệu cho bạn câu trả lời của DNS ở trên là cấp trên: http://stackoverflow.com/questions/517355/string-formatting-in-python/517471#517471 – JosefAssad

17

Bạn đang tìm kiếm để định dạng chuỗi, mà trong python dựa trên chức năng sprintf trong C.

print "[%s, %s, %s]" % (1, 2, 3) 

Đối với một cái nhìn tham khảo đầy đủ ở đây: http://docs.python.org/library/stdtypes.html#string-formatting

+1

Cảm ơn,% cuối cùng có nghĩa là gì? Ngoài ra bạn có phải viết các loại cách nó nên được in như trong C + + với s, d, f, vv? –

+0

Đúng. int =% d, float =% f (và có độ chính xác, vì vậy hãy xem tham chiếu) –

25

Bạn có thể làm điều đó ba cách:


in khá tự động

Sử dụng Python:

print [1, 2, 3] # Prints [1, 2, 3] 

Hiển thị điều tương tự với một biến:

numberList = [1, 2] 
numberList.append(3) 
print numberList # Prints [1, 2, 3] 

Sử dụng 'cổ điển' thay thế chuỗi (ala printf C). Lưu ý các ý nghĩa khác nhau ở đây là% làm trình định dạng chuỗi định dạng và% để áp dụng danh sách (thực sự là một bộ tuple) cho chuỗi định dạng. (. Và lưu ý các% được sử dụng như là modulo (còn lại) điều hành cho các biểu thức số học)

print "[%i, %i, %i]" % (1, 2, 3) 

Lưu ý nếu chúng ta sử dụng biến được xác định trước của chúng tôi, chúng tôi sẽ cần phải biến nó thành một tuple để làm điều này:

print "[%i, %i, %i]" % tuple(numberList) 

Sử dụng Python 3 chuỗi định dạng. Điều này vẫn có sẵn trong các phiên bản trước (từ 2.6), nhưng là cách làm mới trong Py 3. Lưu ý bạn có thể sử dụng các tham số (thứ tự) vị trí, hoặc các đối số được đặt tên (đối với heck của nó) chúng theo thứ tự ngược lại.

print "[{0}, {1}, {2}]".format(1, 2, 3) 

Lưu ý tên 'one', 'hai' và 'ba' có thể là bất cứ điều gì có ý nghĩa.)

print "[{one}, {two}, {three}]".format(three=3, two=2, one=1) 
+4

Để hoàn thiện, sử dụng kiểu "cổ điển", bạn cũng có thể làm: 'in" [% (một) i,% (hai) i,% (ba) i] "% {'ba': 3, 'hai' : 2, 'một': 1} ' – DrAl

4

Để in các yếu tố liên tục sử dụng {} mà không xác định chỉ số

print('[{},{},{}]'.format(1,2,3)) 

(wo rks từ python 2,7 và python 3.1)

0

Nếu bạn không biết có bao nhiêu mặt hàng nằm trong danh sách, aproach này là phổ biến nhất

>>> '[{0}]'.format(', '.join([str(i) for i in [1,2,3]])) 

'[1, 2, 3]' 

Nó là đơn giản hơn mouch cho danh sách các chuỗi

>>> '[{0}]'.format(', '.join(['a','b','c'])) 
'[a, b, c]' 
1

Tôi nghĩ rằng sự kết hợp này bị thiếu: P

"[{0}, {1}, {2}]".format(*[1, 2, 3]) 
0

PEP 498 đáp xuống số python 3.6 thêm nội suy chuỗi chữ, về cơ bản là dạng rút gọn là format.

Bây giờ bạn có thể làm:

f"[{1}, {2}, {3}]" 

Common sử dụng khác tôi thấy hữu ích là:

pi = 3.141592653589793 
today = datetime(year=2018, month=2, day=3) 

num_2 = 2  # Drop assigned values in 
num_3 = "3" # Call repr(), or it's shortened form !r 
padding = 5 # Control prefix padding 
precision = 3 # and precision for printing 


f"""[{1}, 
    {num_2}, 
    {num_3!r}, 
    {pi:{padding}.{precision}}, 
    {today:%B %d, %Y}]""" 

Mà sẽ sản xuất:

"[1,\n  2,\n  '3',\n  3.14,\n  February 03, 2018]" 
Các vấn đề liên quan