【问题标题】:Do something for every fifth object in a list为列表中的每五个对象做一些事情
【发布时间】:2014-08-27 15:35:49
【问题描述】:

好的,所以我有一个代码,我需要打印一个 5x5 方格的游戏板。所有的方块都在squareList,这是一个列表(哦你不说)。正方形基于具有变量number 的对象,这是我要打印的值。我该怎么做?

编辑:我为什么要这样做的原因是因为我想每五个方格开始一个新行,以便我得到一个带有值的板,而不是一条线。

【问题讨论】:

  • for fifth in squareList[4::5]: .. do something with fifth ..
  • for fifth in itertools.islice(squareList, 4, None, 5): ...
  • 我没有看到问题标题与其正文之间的关系。
  • @falsetru 评论不是用来回答的。使用答案来回答。
  • @MatsLindh,我们需要知道实际问题才能回答,标题和正文几乎没有共同点

标签: python list object for-loop


【解决方案1】:

python 切片/数组运算符支持可选的step 作为第三个值。 squareList[start:end:step]:

for o in squareList[::5]:
    print(o.number)

使用 5 作为步长值来获取列表中的每五个条目。

【讨论】:

    【解决方案2】:

    为什么不对正方形中的每一行列出一个列表,然后将这些行放入一个列表中?

    squareList = [rowList1, rowList2, rowList3, rowlist4, rowList5]
    

    这样,您可以在遍历行时操作列。

    for row in SquareList:
      doSomething(row[4])
    

    您还可以使用列表推导提取列。

    colList1 = [row[0] for row in squareList]
    

    【讨论】:

      【解决方案3】:

      我同意您可能希望按照 CCKx 的建议考虑其他更方便的数据结构。

      这里有两种方法

      假设:

      squareList = [0,0,1,0,0,
                    1,2,0,0,1,
                    0,0,0,1,2,
                    2,2,0,0,0,
                    1,0,0,0,1]
      

      那么你可以这样做:

      for index, value in enumerate(squareList):
          print(value, end='')
          if (index % 5) == 4:
              print()
      

      (我假设是 Python 3。)

      这实际上会以您要求的方式完成您要求的事情。 index 将通过列表中的每个元素进行计数,% or "modulo" operator 将在您除以 5 时得到余数,让您在循环中每 5 次执行一些操作。

      或者你可以使用切片:

      for row in range(5):
          for cell in squareList[row*5:row*5+5]:
              print(cell, end='')
          print()
      

      另见:

      What is the most "pythonic" way to iterate over a list in chunks?

      【讨论】:

        猜你喜欢
        • 2015-10-20
        • 2018-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        • 2012-05-08
        • 1970-01-01
        相关资源
        最近更新 更多