【问题标题】:Index error: List index out of range happens at times索引错误:列表索引超出范围有时会发生
【发布时间】:2017-10-29 06:49:47
【问题描述】:

所以,基本上我想知道为什么这段代码有时会工作......有时它工作得很好,有时它会带来索引错误。我有一个包含数据的 4x100 二维列表。我只是从第三行中检索数据以将其全部汇总到 1 个变量中。

这里是列表:

a=4
lst = [[] for _ in xrange(a)]
wifi= Wireless('wlan0')
while i<100:
    results = wifi.scan()
    print cont
    print "%-8.16s  Scan completed :" % (wifi.ifname,)
    for ap in results:
        if ap.bssid==AP1:
            lst[0].append(ap.quality.getSignallevel())

        if ap.bssid==AP2:
            lst[1].append(ap.quality.getSignallevel())

        if ap.bssid==AP3:
            lst[2].append(ap.quality.getSignallevel())

        if ap.bssid==AP4:
            lst[3].append(ap.quality.getSignallevel())
i=i+1
cont=cont+1

for j4 in range(0,100):
    num7=num7+lst[3][j4]

【问题讨论】:

  • 请向我们提供您的 lst 失败的对象示例
  • 什么是lst?它的内容可能是你的罪魁祸首。
  • 您实际上是从第 4 行检索数据,因为您的索引从 0 开始计数。您确定 lst 正好是 4x100? len(lst) == 100all(len(c) == 4 for c in lst) == True 有吗?
  • 很明显,因为您的索引超出范围。没有更多细节就不可能说更多。检查[len(sub) for sub in lst] 的输出给你什么......应该很有启发性。
  • 我刚刚添加了列表,是的,一定是这样,因为我知道我在列表中放入了多少数据,并且我为列表做了行

标签: python arrays python-2.7


【解决方案1】:

正如已经提到的那样,没有足够的信息可以准确地告诉您索引超出范围错误的原因。

有几个可能的原因:

  1. wifi.scan() 不会在列表中准确返回 4 个值。这就是为什么lst 中的第三个列表的大小不是 100。只需检查 results 列表中正好有 4 个值。

  2. 由于某种原因,并非所有 if 语句都有效。您需要检查每个 ap 项目的值 - 只需将它们打印出来并通读这些值。常量AP1AP2 等 - 它们是否已正确初始化?

另外,我会使用elif 语句,而不仅仅是if。我认为它会使代码更具可读性和美观性。

【讨论】:

  • 谢谢大家!问题是每个数组的长度每次编译都不同!
猜你喜欢
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多