[python] 파이썬으로 쉽게 예쁜 수레 인쇄?

수레 목록이 있습니다. 간단히 말하면 print다음과 같이 표시됩니다.

[9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]

목록을 순회하기 print "%.2f"위해 for루프 가 필요한을 사용할 수 있지만 더 복잡한 데이터 구조에서는 작동하지 않습니다. 나는 뭔가를 원한다 (나는 이것을 완전히 구성하고있다)

>>> import print_options
>>> print_options.set_float_precision(2)
>>> print [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
[9.0, 0.05, 0.03, 0.01, 0.06, 0.08]



답변

오래된 질문이지만 잠재적으로 유용한 것을 추가하겠습니다.

원시 Python 목록에 예제를 작성했지만 numpy대신 배열 을 사용하기로 결정한 경우 (숫자의 배열을 다루는 것처럼 보이므로 예제에서 완벽하게 합법적입니다)이 명령이 있습니다. 당신이 구성했다 :

import numpy as np
np.set_printoptions(precision=2)

또는 실제로 정확한 숫자의 모든 소수를 계속보고 싶지만 예를 들어 후행 0을 제거하려면 형식 지정 문자열을 사용하는 것이 더 좋습니다 %g.

np.set_printoptions(formatter={"float_kind": lambda x: "%g" % x})

한 번만 인쇄하고 전역 동작을 변경하지 않으 np.array2string려면 위와 동일한 인수를 사용 하십시오.


답변

아무도 그것을 추가했다, 할 수있는 권장되는 방법 2.6+ 파이썬에서 향후 주목해야한다 문자열 형식화하는 것은 함께 format파이썬 3+를 위해 준비하기.

print ["{0:0.2f}".format(i) for i in a]

새로운 문자열 형식화 구문 은 사용하기 어렵지 않지만 매우 강력합니다.

나는 그것이 pprint뭔가를 가질 수 있지만 아무것도 찾지 못했습니다.


답변

보다 영구적 인 해결책은 다음과 같은 하위 클래스를 만드는 것입니다 float.

>>> class prettyfloat(float):
    def __repr__(self):
        return "%0.2f" % self

>>> x
[1.290192, 3.0002, 22.119199999999999, 3.4110999999999998]
>>> x = map(prettyfloat, x)
>>> x
[1.29, 3.00, 22.12, 3.41]
>>> y = x[2]
>>> y
22.12

서브 클래 싱의 문제 float는 명시 적으로 변수의 유형을 찾는 코드가 깨진다는 것입니다. 그러나 내가 말할 수있는 한, 그것이 유일한 문제입니다. 그리고 단순 x = map(float, x)로의 전환을 취소합니다 prettyfloat.

비극적으로, 당신은 불변 float.__repr__하기 때문에 monkey-patch 만 할 수 없습니다 float.

하위 클래스를 만들고 싶지 float않지만 함수를 정의하는 데 신경 쓰지 않는다면 다음 map(f, x)보다 훨씬 간결합니다.[f(n) for n in x]


답변

넌 할 수있어:

a = [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
print ["%0.2f" % i for i in a]


답변

“% .2f”와 같은 문자열을 곱할 수도 있습니다 (예 : “% .2f”* 10).

>>> print "%.2f "*len(yourlist) % tuple(yourlist)
2.00 33.00 4.42 0.31 


답변

print "[%s]"%", ".join(map(str,yourlist))

이렇게하면 고정 정밀도 제약 조건 (예 "%.2f": 형식 지정) 을 도입하지 않고 인쇄 할 때 이진 표현의 반올림 오류를 방지 할 수 있습니다 .

[9.0, 0.053, 0.0325754, 0.0108928, 0.0557025, 0.0793303]


답변

l = [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]

파이썬 2 :

print ', '.join('{:0.2f}'.format(i) for i in l)

파이썬 3 :

print(', '.join('{:0.2f}'.format(i) for i in l))

산출:

9.00, 0.05, 0.03, 0.01, 0.06, 0.08