Python:列表索引超出范围错误;某些列表元素有效

时间:2014-08-09 21:08:59

标签: python list indexing

我正在使用divmod()函数,并尝试按顺序运行整数变量和整数列表。我使用for循环尝试为列表中的每个元素尝试接收两对值' test',但我似乎无法获取列表中的任何元素(除了元素[1]和[2])用divmod()打印。

代码应该像:

一样运行
  1. 用户输入
  2. 用户输入b
  3. b除以列表中的每个元素' test',找到商和余数。
  4. 这将打印4对值,总共8个值。
  5. 这就是发生的事情:

    1. 用户输入
    2. 用户输入b
    3. b除以列表中的[1]和[2]位置(这种情况为2和5)。
    4. 这将打印2对值,总共4个值。
    5. IndexError:列表索引超出范围"因为我的行而被退回:
      print divmod(b,test [i])
    6. 以下是代码:

      test = [1, 2, 5, 10]
      a = int(raw_input('Input: '))
      b = int(raw_input('Input: '))
      for i in test:
          print divmod(b, test[i])
      

      我可以这样做:

      print divmod(b, 1)
      print divmod(b, 2)
      print divmod(b, 5)
      print divmod(b, 10)
      

      或:

      print divmod(b, test[0])
      print divmod(b, test[1])
      print divmod(b, test[2])
      print divmod(b, test[3])
      

      然而,它似乎效率低下且冗余,我觉得有更好的方法将列表中的元素放入函数中而不必单独调用每个元素?

2 个答案:

答案 0 :(得分:1)

test的有效索引是:

test[0]   #which is 1
test[1]   #which is 2
test[2]   #which is 5
test[3]   #which is 10

超过3的任何索引超出范围。

如果您只想从test逐个传递值,请执行

for i in test:
    print divmod(b, i)

这与你所写的不同:

for i in test:
    print divmod(b, test[i])

这会尝试执行:

print divmod(b, test[1])        # ok, though not the element you want
print divmod(b, test[2])        # ok, though not the element you want
print divmod(b, test[5])        # out of range!
print divmod(b, test[10])       # out of range!

答案 1 :(得分:0)

你可能喜欢这样做:

for i in test:
    print divmod(b, i)