串联二维数组中的列

2024-04-16 17:23:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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]

但肯定有更好的办法吗?你知道吗


Tags: 字符串in列表forlencount数组解决方案
1条回答
网友
1楼 · 发布于 2024-04-16 17:23:37

如果有不同长度的列表,可以使用^{},它允许指定填充值:

>>> 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']

较短的列表将使用此填充值填充到最长列表的长度。你知道吗

在python2中,函数名为izip_longest。你知道吗

相关问题 更多 >