Eu tenho uma lista de carros alegóricos. Se eu simplesmente fizer print
isso, aparecerá assim:
[9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
Eu poderia usar print "%.2f"
, o que exigiria um for
loop para percorrer a lista, mas não funcionaria para estruturas de dados mais complexas. Eu gostaria de algo como (estou completamente inventando)
>>> 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]
fonte
.replace("'", "")
para me livrar das vírgulas.str(["{0:0.2f}".format(i) for i in a]).replace("'", "")
''
ao seu redor. Por exemplo, paraa=[0.2222, 0.3333]
, ele vai produzir['0.22', '0.33']
.' '.join([{0:0.2f}".format(i) for i in a])
Uma solução mais permanente é criar uma subclasse
float
:O problema com a criação de subclasses
float
é que ela quebra o código que está procurando explicitamente o tipo de uma variável. Mas, pelo que posso dizer, esse é o único problema com isso. E um simplesx = map(float, x)
desfaz a conversão paraprettyfloat
.Tragicamente, você não pode simplesmente corrigir o problema
float.__repr__
, porquefloat
é imutável.Se você não quer criar uma subclasse
float
, mas não se importa em definir uma função,map(f, x)
é muito mais conciso do que[f(n) for n in x]
fonte
isinstance
deve ser usado, não a igualdade detype()
. Quando feito corretamente, uma subclasse de float ainda será contada como um float.Você pode fazer:
fonte
Observe que você também pode multiplicar uma string como "% .2f" (exemplo: "% .2f" * 10).
fonte
" ".join("%.2f" % x for x in yourlist)
já que separar string de formato e valores de interpolação é muito pior do que usar uma linguagem feia de Python.Isso evitará os erros de arredondamento na representação binária quando impressa, sem introduzir uma restrição de precisão fixa (como formatação com
"%.2f"
):fonte
Python 2:
Python 3:
Resultado:
fonte
A opção mais fácil deve ser usar uma rotina de arredondamento:
Isso produz a saída:
fonte
Eu acredito que o Python 3.1 irá imprimi-los melhor por padrão, sem qualquer alteração no código. Mas isso é inútil se você usar qualquer extensão que não tenha sido atualizada para funcionar com Python 3.1
fonte
Os comps da lista são seus amigos.
Tente:
fonte
Para controlar o número de dígitos significativos , use o especificador de formato% g.
Vamos nomear a solução de Emile como prettylist2f. Aqui está o modificado:
Uso:
Se você quiser flexibilidade no número de dígitos significativos, use a formatação de string f em seu lugar:
fonte
Você pode usar pandas.
Aqui está um exemplo com uma lista:
Se você tiver um ditado e quiser suas chaves como linhas:
E outra maneira de dar ditado a um DataFrame:
fonte
Primeiro, os elementos dentro de uma coleção imprimem sua repr. você deve aprender sobre
__repr__
e__str__
.Esta é a diferença entre print repr (1.1) e print 1.1. Vamos juntar todas essas strings em vez das representações:
fonte
Acabei de ter esse problema ao tentar usar o pprint para gerar uma lista de tuplas de flutuantes. Compreensões aninhadas podem ser uma má ideia, mas eis o que fiz:
Usei expressões de gerador no início, mas pprint apenas repred o gerador ...
fonte
A partir do Python 3.6, você pode usar strings f:
Você pode usar parâmetros de impressão enquanto mantém o código muito legível:
fonte
Eu tive esse problema, mas nenhuma das soluções aqui fez exatamente o que eu queria (quero que a saída impressa seja uma expressão Python válida), então que tal:
Uso:
(Eu sei que .format () deve ser a solução mais padrão, mas acho isso mais legível)
fonte
Eu concordo com o comentário do SilentGhost, o loop for não é tão ruim assim. Você pode conseguir o que deseja com:
fonte
O código abaixo funciona bem para mim.
fonte