2016-08-29 1 views
0
a = [[1.0993455308580886, 1.9814814814814814, 1.2331369355392543, 1.646283618833137, 2.2736098709332486, 1.50035992597825]] 

У меня есть список списков выше. Как я могу напечатать его, чтобы напечатать номер с 3 десятичными числами. Я хочу это:Как распечатать список списков со значениями, имеющими 3 десятичных числа?

b = [[1.099, 1.981, 1.233, 1.646, 2.273, 1.500]] 

Есть ли способ, чтобы я мог заставить все числа с плавающей точкой в ​​моем коде, чтобы иметь номера 3 десятичных?

+0

Возможный дубликат [Изменить поплавковый формат печати по умолчанию] (http://stackoverflow.com/questions/3264828/change-default-float-print-format) –

+0

@RicardoCruz нет ответов на списки:/ –

+0

, когда вы выполняете 'print (obj)', функция 'print' будет вызывать либо' obj .__ str __() ', либо' obj .__ repr __() ', если первая не реализована. В случае «list» список затем вызывает соответствующие функции для каждого элемента. В вашем случае вызывается 'float .__ str __()'. Невозможно изменить это глобально, но вы можете реализовать свою собственную функцию печати для своих списков на разовой основе. –

ответ

2

Это DUP из Change default float print format.

Короче говоря: вы не можете изменить его во всем мире. Но вы можете написать функцию, что

return [[round(n, 3) for n in a[0]]] 

или

return [['%.3f' % n for n in a[0]]] 

Создание списков, как это называется список понимание. Кроме того, вы можете также использовать map:

return [map(lambda n: '%.3f' % n, a[0])] 

Но обычно разработчики Python предпочитают список понимание.

+0

Можете ли вы мне объяснить, как работает [['% .3f'% n для n в [0]]], работает и как я могу записать его более чем в одной строке, чтобы быть более читабельным для меня? –

+0

Вы можете написать это как: 'l = []; для n в a [0]: l.append ('%. 3f'% n) '(при необходимости разрывая линии). Проблема в том, что она намного медленнее **. Гораздо быстрее использовать понимание списка ('l = [элемент для элемента в списке]') или 'map'. Это специальные трюки на основе python, так что код можно оптимизировать и работать со скоростью C. –

+0

Спасибо, это помогло много :) –

0

var a = [[1.0993455308580886, 1.9814814814814814, 1.2331369355392543, 1.646283618833137, 2.2736098709332486, 1.50035992597825]] 
 

 
var b = []; 
 

 
//copy a into b array 
 
for(var i = 0, len = a.length; i < len; ++i) 
 
    b[i] = a[i]; 
 

 
//round 
 
for(var x = 0, len = b.length; x < len; ++x) 
 
    for(var s = 0, len2 = b[x].length; s < len2; ++s) 
 
     b[x][s] = b[x][s].toFixed(3); 
 

 
console.log(b.toString())

+0

ОП задает в Python, а не Javascript. :) –

+0

Во всяком случае, ваш код не нужен долго даже по стандартам JS. Следующий код эквивалентен вашему: 'b = a [0] .map (function (n) {return n.toFixed (3)})'. –

+0

это правда, спасибо за обмен! –