我最近学习了 Python,我在这 tutorial 之间交替和一本名为 Automate The Boring Stuff With Python 的书.
我觉得这本书很容易理解,练习也很有趣。 我刚刚解决了一个问题,但老实说,我对我的答案并不满意。
在问题中,给定一个网格如下:
grid = [['.', '.', '.', '.', '.', '.'],
['.', '0', '0', '.', '.', '.'],
['0', '0', '0', '0', '.', '.'],
['0', '0', '0', '0', '0', '.'],
['.', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '.'],
['0', '0', '0', '0', '.', '.'],
['.', '0', '0', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
仅使用循环,然后需要产生以下输出:
..00.00..
.0000000.
.0000000.
..00000..
...000...
....0....
我对这个问题的解决方案(有效)如下:
for y in range(0,len(grid[0])):
for x in range(0, len(grid)):
print(grid[x][y], end='')
print()
我的问题是网格[0]。我试图概括代码以适应 grid 中的列表具有不同值的场景,但失败了。
因此,我的问题是如何在一般变量项中检索 grid[0] 的 len?
换句话说,如何在列表中检索列表的长度?
请您参考如下方法:
您实际上不需要检索长度。
你可以在不知道尺寸的情况下在一行中完成:
print('\n'.join(map(lambda x: ''.join(x), zip(*grid))))
一步一步:
zip(*grid)将转置您的二维数组
>>> list(zip(*grid))
[('.', '.', '0', '0', '.', '0', '0', '.', '.'),
('.', '0', '0', '0', '0', '0', '0', '0', '.'),
('.', '0', '0', '0', '0', '0', '0', '0', '.'),
('.', '.', '0', '0', '0', '0', '0', '.', '.'),
('.', '.', '.', '0', '0', '0', '.', '.', '.'),
('.', '.', '.', '.', '0', '.', '.', '.', '.')]
map(lambda x: ''.join(x), zip(*grid))将连接每一行
>>> list(map(lambda x: ''.join(x), zip(*grid))) ['..00.00..', '.0000000.', '.0000000.', '..00000..', '...000...', '....0....']
- 最后
'\n'.join加入分隔符作为新行
>>> print('\n'.join(map(lambda x: ''.join(x), zip(*grid))))
..00.00..
.0000000.
.0000000.
..00000..
...000...
....0....
注意:我们也可以通过使用 sep='\n 的 print 省略第 3 步,但是在 Python3 中: Why does map return a map object instead of a list in Python 3?我们需要在打印之前将其转换为 list。像这样:
print(list(map(lambda x: ''.join(x), zip(*grid))), sep='\n')
