Skip to main content
 首页 » 编程设计

python之连接二维数组中的列

2025年05月04日96leader

我有一个类似于这个的字符串列表列表:

arr = [['a', 'b', 'c'], 
       ['X', 'Y', 'Z'], 
       ['1', '2', '3'], 
      ] 

我需要将其转换为串联“列”的列表,即:

['aX1', 'bY2', 'cZ3'] 

我想到了将整个数组顺时针旋转 90 度,然后以相反顺序连接每行中的所有项目的解决方案:

[''.join(reversed(row)) for row in zip(*reversed(arr))] 

只要每行具有相同数量的项目,这就有效。但是,如果不是这种情况怎么办。假设我有一个这样的数组:

arr = [['a', 'b', 'c', 'd'], 
       ['X', 'Y'], 
       ['1', '2', '3'], 
      ] 

我期望的是:

['aX1', 'bY2', 'c3', 'd'] 

在使用上述解决方案之前,我可以用空字符串项填充较短的行:

max_item_count = max(len(row) for row in arr) 
arr = [row + [''] * (max_item_count - len(row)) for row in arr] 

但肯定有更好的方法吗?

请您参考如下方法:

如果你有不同长度的列表,你可以使用 zip_longest允许指定填充值:

>>> from itertools import zip_longest 
>>> arr = [['a', 'b', 'c', 'd'], ['X', 'Y'], ['1', '2', '3']] 
>>> [''.join(x) for x in zip_longest(*arr, fillvalue='')]   
['aX1', 'bY2', 'c3', 'd'] 

使用此填充值填充较短的列表,直到达到最长列表的长度。

在 Python 2 中,该函数被命名为 izip_longest。