【问题标题】:Modulo with index numbers starting at 0?索引号从 0 开始的模数?
【发布时间】:2020-06-24 01:33:45
【问题描述】:

我正在尝试使用 for 循环(索引从 0 开始)遍历列表,并且我希望某个函数每 10 个索引执行一次。但是,由于我在该函数中将列表中的数字按 10 分组(例如,0-9,10-19,20-29 等),因此 index%10 不起作用。有没有更有效的方法来做到这一点?我下面的代码有效,但我觉得有更好的方法吗?

if(index>1 and index<10):
    if((index)%9 == 0):
         func()
elif(index>10):
    if((index+1)%10 == 0):
         func()

【问题讨论】:

  • 我不明白为什么index%10(index+1)%10 都不起作用。 “第十指数”对您意味着什么? (即,您希望触发此条件的具体 int 值是什么?)
  • 有一个可选的step 变量可以在您对列表进行切片时传递:list1[start:stop:step],请参考stackoverflow.com/a/509295/8350440

标签: python modulo


【解决方案1】:

您仍然使用模 10,因为您想要每十分之一,但不是检查 9,而是检查零。

if(index % 10 == 9)

Modulo 只得到除法的余数。你想要 9、19、29 和 39。如果你把每一个都除以 10,余数是多少?每次都是 9。

【讨论】:

    【解决方案2】:

    您在代码的第二部分中已经使用的测试实际上就是您所需要的:

    if (index + 1) % 10 == 0:
        func()
    

    无需测试是否index &gt; 10func() 将在 index = 9, 19, 29, .... 时被调用。

    如果你愿意,你可以这样写:

    if index % 10 == 9:
        func()
    

    但是,虽然第二个版本的计算速度可能会稍微快一些,但第一个版本更简洁,因为例如,如果您想将每 10 个索引打印一次更改为每 8 个索引打印一次,那么您只需要更改代码(即它出现的数字10),所以它更易于维护。

    【讨论】:

      【解决方案3】:

      由于第十个索引用9表示:

      if index % 10 == 9:
          func()
      

      【讨论】:

        猜你喜欢
        • 2016-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-10
        • 1970-01-01
        • 2013-05-29
        • 2020-09-20
        • 1970-01-01
        相关资源
        最近更新 更多