5

Tôi có một danh sách các phao nổi bằng Python và khi tôi chuyển đổi nó thành một chuỗi, tôi nhận được follwoingpython chuyển đổi một danh sách các phao để chuỗi

[1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001] 

Những nổi có 2 chữ số sau dấu thập phân khi tôi tạo ra chúng (tôi tin như vậy),

sau đó, tôi sử dụng

str(mylist) 

làm thế nào để tôi nhận được một chuỗi với 2 chữ số sau dấu thập phân?

======================

Hãy để tôi được cụ thể hơn:

Tôi muốn để có được một cái gì đó như "[1883,95, 1878.33, 1869.43, 1863.40] "

Tôi cần thực hiện một số thao tác chuỗi sau đó. Ví dụ: + = "! \ T!"

Tôi muốn kết quả cuối cùng là một chuỗi và tôi muốn giữ các dấu tách.

Tất nhiên chúng ta đều biết cách làm điều đó trong một vòng lặp, nhưng hy vọng ai đó có thể đưa ra một cách thanh lịch rất thông minh &.

lấy cảm hứng từ @senshin đoạn mã sau làm ví dụ, nhưng tôi nghĩ rằng có một cách tốt hơn

msg = "[" 
for x in mylist: 
    msg += '{:.2f}'.format(x)+',' 
msg = msg[0:len(msg)-1] 
msg+="]" 
print msg 

Cảm ơn!

Trả lời

9

Sử dụng định dạng chuỗi để có được số chữ số thập phân mong muốn.

>>> nums = [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001] 
>>> ['{:.2f}'.format(x) for x in nums] 
['1883.95', '1878.33', '1869.43', '1863.40'] 

Chuỗi định dạng {:.2f} có nghĩa là "in một số điểm cố định (f) với hai địa điểm sau dấu thập phân (.2)". str.format sẽ tự động làm tròn số chính xác (giả sử bạn đã nhập các số có hai chữ số thập phân ở vị trí đầu tiên, trong trường hợp đó lỗi dấu phẩy động sẽ không đủ để gây rối với làm tròn).

+0

Điều đó có hiệu quả, tôi nhận được ['1883.95', '1878.33', '1869.43', '1863.40'] tuy nhiên, tôi có thể lấy một cái gì đó như "[1883,95, 1878.33, 1869.43, 1863.40] "? Tôi cần một số hoạt động chuỗi sau đó. Cảm ơn! – Niebieski

+0

@Niebieski Bạn muốn có một chuỗi đại diện của toàn bộ danh sách? Tôi rất nghi ngờ rằng đó là những gì bạn _actually_ muốn, nhưng bạn chỉ có thể gọi' str () 'trên danh sách để có được một cái gì đó gần. – senshin

+0

Tôi muốn làm + ="! \ t! ", hoặc hoạt động tương tự – Niebieski

1
map(lambda n: '%.2f'%n, [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001]) 

map() gọi hàm được gọi trong đối số đầu tiên cho mỗi phần tử trong danh sách/lặp lại được chuyển làm đối số thứ hai.

+1

Xin vui lòng đưa ra lời giải thích trong câu trả lời của bạn Câu trả lời chỉ có mã hiếm khi giúp mọi người học, đó là (lý tưởng) những gì chúng tôi đang ở đây để làm – BradleyDotNET

+0

@Bradley Done! Happy? :) Alt ough tôi không hoàn toàn đồng ý rằng «ví dụ mã chỉ hiếm khi giúp mọi người tìm hiểu». –

0

Hãy loại bỏ 'đánh dấu:

>>> nums = [1883.95, 1878.3299999999999, 1869.4300000000001, 1863.4000000000001] 
>>> '[{:s}]'.format(', '.join(['{:.2f}'.format(x) for x in nums])) 
'[1883.95, 1878.33, 1869.43, 1863.40]' 
  • [' {: 2f}.' Định dạng (x) cho x trong nums] tạo ra một danh sách các chuỗi, như trong chấp nhận câu trả lời.
  • ',' .join ([danh sách]) trả về một chuỗi có ',' được chèn vào giữa các phần tử danh sách.
  • '[{: s}]' định dạng (join_string) thêm dấu ngoặc vuông.
Các vấn đề liên quan