【问题标题】:Python -- how to force enumerate to start at 1 -- or workaround?Python——如何强制枚举从 1 开始——或解决方法?
【发布时间】:2015-03-07 23:41:21
【问题描述】:

我有一个简单的 for 循环:

for index, (key, value) in enumerate(self.addArgs["khzObj"].nodes.items()):

并且我想在每 3 个项目之后启动一个新的 wx 水平 boxsizer,以创建一个面板,每个面板有 3 个节点,并且在节点中继续进行。显而易见的解决方案是:

if index % 3 == 0: add a horizontal spacer

但枚举从 0 开始,所以 0 % 3 == 0 并且它会立即开始一个新行。我试过这样做:

if index == 0: index = index + 1

但这当然行不通,因为它创建了一个新的 var 而不是更改原来的 - 所以我得到 1、1、2、3、4 等,这不起作用,因为我会得到 4在我达到索引 % 3 == 0 之前的节点。

关于如何做到这一点的任何建议?这不是一个大的枚举,通常只有大约 10-15 项。谢谢。

【问题讨论】:

标签: python for-loop enumeration modulus


【解决方案1】:

从 Python 2.6 开始,enumerate() 采用可选的 start 参数来指示从何处开始枚举。见the documentation for enumerate

【讨论】:

  • 我不知道,猜你每天都会学到新东西。干得好。
  • 在添加之前,itertools.izip(itertools.count(1), L) 会是这样做的方式。
  • +1 这实际上很容易知道,但操作也可以只使用index % 3 == 2
  • 使用 enumerate 仍然会循环遍历所有元素,它只是改变它开始的位置。
【解决方案2】:

你会讨厌这个答案是多么明显,但你可以这样做:

if index % 3 == 2: add a horizontal spacer

这会在第二个元素(实际上是第三个)之后添加间隔符,并且在它之后每隔三个元素添加一次。

【讨论】:

  • 我没有注意到——太棒了。不过,我将 Daniel 标记为正确,因为它更明确一些,并且在其他不太整洁的情况下对我有帮助;)
  • 他的解决方案确实很不错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 2013-01-15
相关资源
最近更新 更多