我正在尝试打印像棋盘一样的列表,我希望它看起来像这样:)
row=1,2,3,4,5,6,7,8
column = a,b,c,d,e,f,g
board=[[1A], [1B], [1C], ......etc.]
有没有办法做到这一点?我还是python的新手。
答案 0 :(得分:3)
你可以这样做:
row = [1,2,3,4,5,6,7,8]
column = ['a','b','c','d','e','f','g','h']
board = [[str(i)+j.upper() for j in column] for i in row]
>>> print board
['1A', '1B', '1C', '1D', '1E', '1F', '1G', '1H']
['2A', '2B', '2C', '2D', '2E', '2F', '2G', '2H']
...
['8A', '8B', '8C', '8D', '8E', '8F', '8G', '8H']
上面的代码使用双列表理解来创建八个元素的列表,每个列表创建一个行和列的产品,并提供一个二维板。
>>> a = ['a','b','c']
>>> b = ['a','b','c']
>>> print [[i+j for j in a] for i in b]
[['aa','ab','ac'],
['ba','bb','bc'],
['ca','cb','cc']]
答案 1 :(得分:3)
我认为最pythonic的方式是使用itertools标准库,如下所示:
from itertools import product
board = list(product(rows, columns))
这将为您提供一个元组列表,然后您可以按上述海报建议的方式加入(您可能实际上希望将它们保留为元组,为了进一步使用而制作一个字典,例如而不是有字符串你可以用
result = [{'row': r, 'column': c} for r, c in product(rows, columns)]
或者,如果你需要动态做一些事情,你只需要做
for row, column in product(rows, columns):
# do something for each row colum combination
它明显优于嵌套列表理解,它是一个生成器,因此它的内存效率更高。在你的棋盘情况下,后一个论点并不重要。
答案 2 :(得分:2)
你很可能想要一份清单清单:
board = [['{}{}'.format(row, col) for col in columns] for row in rows]
这会生成一个嵌套的列表列表:
>>> rows = [1, 2, 3, 4, 5, 6, 7, 8]
>>> columns = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> board = [['{}{}'.format(row, col) for col in columns] for row in rows]
>>> from pprint import pprint
>>> pprint(board)
[['1a', '1b', '1c', '1d', '1e', '1f', '1g', '1h'],
['2a', '2b', '2c', '2d', '2e', '2f', '2g', '2h'],
['3a', '3b', '3c', '3d', '3e', '3f', '3g', '3h'],
['4a', '4b', '4c', '4d', '4e', '4f', '4g', '4h'],
['5a', '5b', '5c', '5d', '5e', '5f', '5g', '5h'],
['6a', '6b', '6c', '6d', '6e', '6f', '6g', '6h'],
['7a', '7b', '7c', '7d', '7e', '7f', '7g', '7h'],
['8a', '8b', '8c', '8d', '8e', '8f', '8g', '8h']]
您可以通过以下方式处理单个行:
board[rownumber]
或具体的国际象棋职位:
board[rownumber][columnnumber]
请注意,该列也是的数字!您必须在此处将列名称('a'
,'b'
等)翻译为列号:
board[rownumber][ord(columnname) - 97]
会这样做,因为ord('a')
(字符'a'
的ASCII位置)是97.索引是基于0的;国际象棋职位1a转换为board[0][0]
:
>>> board[0][0]
'1a'
答案 3 :(得分:1)
您可以使用地图:
map(lambda x:(map(lambda y:str(x)+y,column)),row)
输出:
[
['1a', '1b', ..],
['2a', '2b', ..],
etc..
]
答案 4 :(得分:1)
from itertools import product
row = range(1.9)
column = ['A', 'B', 'C', 'D', 'E', 'F','G', 'H']
board = [['{}{}'.format(*pos)] for pos in product(row,column)]
print board
[[1A], [1B], [1C], ......etc.]
修改强>:
因此product(row, colum)
会创建一个一次生成(1,'A'), (1, 'B'), ...,(8, 'G'), (8, 'H')
个生成器的生成器。换句话说,它会创建row
中的条目与column
中每个条目的每个组合。 '{}{}'.format(*pos)
使用*
将2元组和splats的内容带入format函数。写它的另一种方法是
board = [['{}{}'.format(r,c)] for r,c in product(row,column)]