2014-08-27 47 views
-3

好的,所以我有一个代码,我需要用5x5的方块打印游戏板。所有的广场在squareList,这是一个列表(哦,你不说)。正方形基于具有变量number的对象,这是我想要打印的值。我怎样才能做到这一点?为列表中的每个第五个对象做些什么

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

+1

'为第五squareList [4 :: 5]:..做第五..' – falsetru 2014-08-27 15:37:38

+0

东西或者在itertools.islice(squareList,4,None,5)中为第五个:...' – falsetru 2014-08-27 15:38:11

+4

我没有看到问题标题和它的正文之间的关系。 – interjay 2014-08-27 15:38:25

回答

2

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

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

使用5作为步长值获取列表中的每一个的第五项。

0

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

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

这样,您可以在循环遍历行时操纵列。

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

您还可以使用列表理解提取列。

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

我同意你可能想要考虑其他更方便的数据结构,正如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将通过列表中的每个元素进行数值计算,当您除以5时,% or "modulo" operator会让您获得剩余的余数,从而允许您在循环中每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?

相关问题