【问题标题】:IndexError: list index out of range for working code [closed]IndexError:工作代码的列表索引超出范围[关闭]
【发布时间】:2014-01-18 17:02:20
【问题描述】:

考虑给出的代码:

它显示列表索引超出范围。

enter code here    

对于范围内的 x (max_count): 尝试: 结果 = 下一个(生成) 断言 len(result) == tuple_length, "无效长度" 结果中的元素: 断言 x == 元素,“意外值” 除了 StopIteration 作为 si: 通过

尝试: 下一代) 断言 False,“生成器未按预期完成” 除了 StopIteration as se: 通过

【问题讨论】:

  • 源码为文字;请在此处粘贴代码,并附上异常的完整回溯。
  • def generator_zip(seq1, seq2, *more_seqs): for i in range(len(min(seq1,seq2,more_seqs)) - 1): l1 = [] l2 = [] for s1 in seq1,seq2: l1.append(s1[i]) for s2 in more_seqs: l2.append(s2[i]) l = l1 + l2 p = tuple(l) yield list(p)
  • 您可以edit您的问题添加代码。将其粘贴到问题中后,选择所有源代码并单击 {} 按钮进行格式化。

标签: python list python-2.7 generator


【解决方案1】:

你的操作顺序都搞砸了... range(len(min(seq1,seq2,more_seqs)) 不会返回您认为的结果。在这里,您使用min 并找到包含最小内容的列表,然后获取min 返回的任何列表的长度。

这里有一些示例代码来证明这一点:

seq1 = [100, 200, 300]
seq2 = [10, 20, 30, 40]
seq3 = [1000, 2000]

print len(min(seq1, seq2, seq3))
#prints 4 (the length of seq2 because it has the smallest values)

print min(len(x) for x in [seq1, seq2, seq3])
#prints 2 which is the minimum of all the lengths

【讨论】:

  • 这里我使用变量args。函数定义如下:def generator_zip(seq1, seq2, *more_seqs):
  • 你期望函数产生什么?一个巨大的元组,它是所有序列中的所有值?请澄清。
  • @catwalker333 看起来任务基本上是重新实现 zip 作为生成器。即来自 itertools 的 izip。
  • 如果我通过 range(5),"abc",range(2),"apple",它应该返回 [(0,'a',0,'a'),(1, 'b',1,'p'). 如果给定 range(1, 5), "abc", [1, 2] 作为输入,它应该给出 [(1, 'a', 1), (2, ' b', 2)] 作为输出。所有这些都应该使用生成器来完成。
猜你喜欢
  • 2021-02-08
  • 2019-01-06
  • 2011-10-31
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多