【问题标题】:python list index issuepython列表索引问题
【发布时间】:2012-02-04 21:14:53
【问题描述】:

我有一个相当基本的 python 问题,代码如下:

def LCM(nums): 
    i = max(nums)
    var = 0
    x = 0
    while i>0:
        for x in nums:
            var = var+int(nums[x])%i
        if (var == 0):
            return i
        i=i-1

nums 是一个列表,我认为x 是该列表的索引,for 语句应该以nums[x] 遍历列表中的每个值。 x 似乎应该从 nums 的第一个元素开始,并遍历每个值直到 nums 用完值。

相反,我得到了list index out of range,我不明白这怎么可能。 我的for 语法搞砸了吗?我无法解释这一点。

【问题讨论】:

  • 提交代码由于某种原因破坏了缩进,如果太混乱我可以重新提交
  • 我想我修好了。 (您不需要使用 [code],只需选择文本并点击输入框上方的 {} 按钮,或点击 control-K)。您现在可以检查每行的缩进是否正确吗?

标签: python list for-loop


【解决方案1】:

x 不是索引。 xlist 中的一个元素。

另外,if-条件不需要括号。

简单演示:

>>> nums = [11, 12, 13, 14, 15, 16]
>>> for x in nums:
...     if x % 3 == 0:
...         print x, 'is divisible by three'
...     else:
...         print x
... 
11
12 is divisible by three
13
14
15 is divisible by three
16

【讨论】:

  • 哦。我的。天哪。谢谢你。
【解决方案2】:

正如其他人所说,xnums 的一个元素。为了完整起见,如果您想迭代列表并访问索引,请查看enumerate()

for i, x in enumerate(nums):
    print i, x #nums[i] == x

【讨论】:

  • 您可能希望在您的示例中实际调用enumerate() ;)
  • @Johnsyweb 你是什么意思? :)
【解决方案3】:

x 已经是nums 的一个元素。将nums[x] 替换为x

【讨论】:

    【解决方案4】:

    如果你想使用它的索引来移动元素,你可以使用

    for x in range (len(nums)):
    

    而不是

    for x in nums:
    

    因为在您的代码中,它通过列表中第 i 个值的索引传播。 就像假设列表的第一个值是 34 并且列表的大小为 5,所以根据您的代码,您试图从列表中移动第 34 个索引值,这就是您得到的原因。

    列表索引超出范围

    【讨论】:

      猜你喜欢
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 2019-07-05
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多