python:如何在这个简单的while循环中避免“列表索引超出范围”

时间:2009-11-27 03:30:12

标签: python loops while-loop

我的L1数组包含0.029999999999999999之类的数字,我想将其打印为0.03

我的代码有效,但最后会出错,因为最后一次计数超出了范围。我明白为什么它会破裂,但不知道如何解决它。感谢

count = 1

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

4 个答案:

答案 0 :(得分:9)

如果要打印L1中的所有数字,请使用:

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

如果您想跳过第一个,for x in L1[1:]:将有效。

编辑:OP在评论(!)中提到他们的愿望实际上是“创建一个新阵列”(我想他们实际上是指“新列表”,而不是{{1但是,那不会是非常不同的)。浮动世界中没有“舍入数字” - 你可以使用array.array,但这仍然会给你一个浮动,所以它不一定有“正好2位数”。无论如何,对于字符串列表:

round(x, 2)

或带有十进制数字的那个(如果你愿意,可以正好有两位数字):

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

答案 1 :(得分:2)

为什么不循环遍历L1列表而不是进行while循环?

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

保持简单:)

答案 2 :(得分:0)

L2=["%.2f" %i for i in L1]

答案 3 :(得分:0)

2个问题:

  1. 你的循环永远不会结束(而L1)
  2. 您开始使用1进行索引(初始化时计数= 1)
  3. 更好的是,就像其他人说的那样:

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

    如果你还需要索引(count):

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

    另请参阅Pythonic expressions了解一些使用python的更好方法。