【问题标题】:Skipping indexes in Python?在 Python 中跳过索引?
【发布时间】:2019-12-06 15:22:24
【问题描述】:

我基本上是在尝试遍历 12 个值的列表,如果特定索引处的值(每三分之一)也是字典中的值,我想将相应的键附加到新列表中。 ps 是一个包含 12 个值的列表。 dict 也是一个包含 12 个键和值的字典。

ps = [57.06, 98.74, 83.3, 77.24, 63.59, 101.11, 83.2, 90.67, 85.12, 72.28, 
86.16, 92.56]

list1=[]            
count=0
while count<10:
      for key, value in dict.items():
         if value ==ps[count]:  
            list1.append(key)
            count=count+3

我收到“索引超出范围”错误。如果我输入“while count

任何帮助将不胜感激。

代码在“if value ==ps[count]:”处失败

【问题讨论】:

  • 你能告诉我们ps的列表是什么吗?
  • 失败在哪一行?另外,你能告诉我们ps里有什么吗?
  • list1 = [k for k, v in dict.items() if v in ps[::3]]…?!
  • 我试过这段代码,它可以工作,但它按顺序(6、0、3、9)将值添加到列表中。有没有办法解决这个问题,使它们按 (0,3,6,9) 的顺序排列?

标签: python list loops


【解决方案1】:

以下是它可能失败的原因:

for key, value in dict.items():
    if value == ps[count]:  
        list1.append(key)
        count=count+3
  1. 开始上面的循环(迭代 0;计数 == 0)
  2. 输入if语句,增加count
  3. 开始下一次迭代(迭代 1;计数 == 3)
  4. 输入if语句,增加count
  5. 开始下一次迭代(迭代 2;计数 == 6)
  6. 输入if语句,增加count
  7. 开始下一次迭代(迭代 3;计数 == 9)
  8. 输入if语句,增加count
  9. 开始下一次迭代(迭代 4;计数 == 12)
  10. 输入if语句,增加count
  11. 开始下一次迭代(迭代 5;计数 == 15)
  12. 继续进行!
  13. 在某些时候count 变得大于或等于ps 的长度,你会得到错误

为什么?因为dict.items() 可能包含千万亿个元素,并且在迭代它们时,您正在增加count 而不是检查它,因为整个循环仍然是第一次迭代外部while 循环。

【讨论】:

  • 谢谢,我没想到。
【解决方案2】:

while 循环结束时,将 count 增加 3,因此 count = 0, 3, 6, 9 满足您的条件,基本上是 4 次迭代。 如果您想遍历给定范围,我建议您使用 for 循环,它可以让您指定 step_size for count in range(0, 10, 3):

如果您想遍历所有元素,只需调整 step_size

【讨论】:

  • 这是个好主意,我不知道该怎么做。你知道我如何实现这段代码,因为我有 2 个“for”循环吗?
【解决方案3】:

原因是你的for循环在while循环中,所以它会在再次检查while条件之前完全完成for循环。

要解决此问题,您可以改为:

  list1=[]            
  count=0
  for key, value in dict.items():
      if count <10:
         if value == ps[count]:  
            list1.append(key)
            count=count+3

或者,正如@deceze所说的

list_1 = [k for k, v in dict.items() if v in ps[::3]]

因为 ps[::3] 是 ps 的每个第三个元素的列表

【讨论】:

  • 哦,我明白了,没想到这一点,我尝试了您建议的代码,它适用于索引 0 和 3,但随后停止。所以计数需要达到 9。不能完全弄清楚为什么它适用于 2 次迭代而不是 4 次
猜你喜欢
  • 2018-05-28
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 2023-01-17
相关资源
最近更新 更多