Skip to main content
 首页 » 编程设计

Python:检索列表值内列表值的长度

2025年05月04日14mayingbao

我最近学习了 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)))) 

一步一步:

  1. 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', '.', '.', '.', '.')] 
  1. map(lambda x: ''.join(x), zip(*grid)) 将连接每一行
>>> list(map(lambda x: ''.join(x), zip(*grid))) 
['..00.00..', '.0000000.', '.0000000.', '..00000..', '...000...', '....0....'] 
  1. 最后 '\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')