Python: как я могу избежать "списка индекса вне диапазона" в этом простом цикле while - PullRequest
0 голосов
/ 27 ноября 2009

мой массив L1 содержит числа типа 0.029999999999999999, которые я хочу распечатать как 0.03

мой код работает, но выдает ошибку в конце, потому что последний счет находится вне диапазона. Я понимаю, почему он ломается, но не знаю, как это исправить. спасибо

count = 1

while L1:
    print "%.2f" %L1[count]
    count = count + 1

Ответы [ 4 ]

9 голосов
/ 27 ноября 2009

Если вы хотите напечатать все числа в L1, используйте:

for x in L1: print '%.2f' % x

Если вы хотите пропустить первый, for x in L1[1:]: будет работать.

Редактировать : ОП упоминает в комментарии (!), Что на самом деле они хотят «создать новый массив» (я думаю, они на самом деле означают «новый список», а не array.array, но это не будет сильно отличаться). В мире с плавающей точкой нет «округленных чисел» - вы можете использовать round(x, 2), но это все равно даст вам число с плавающей точкой, поэтому оно не обязательно будет иметь «ровно 2 цифры». Во всяком случае, для списка строк:

newlistofstrings = ['%.2f' % x for x in L1]

или для одного с десятичными числами (который может иметь ровно 2 цифры, если хотите):

import decimal
newlistofnnumbers = [decimal.Decimal('%.2f') % x for x in L1]
2 голосов
/ 27 ноября 2009

Почему бы вам не выполнить цикл по списку L1 вместо выполнения цикла while?

for i in L1:
   print "%.2f" % i

Будьте проще:)

0 голосов
/ 27 ноября 2009

2 задачи:

  1. Ваш цикл никогда не заканчивается (пока L1)
  2. Вы начинаете индексирование с 1 (при инициализации = 1)

Лучше, как говорили другие:

for i in L1:
    print "%.2f" % i

и если вам также нужен индекс (количество):

for (index, item) in enumerate(L1):
    print "Element number (0-based) %d is %f" % (index, item)

См. Также Выражения Pythonic , где описаны еще несколько приятных способов использования Python.

0 голосов
/ 27 ноября 2009
L2=["%.2f" %i for i in L1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...