gpt4 book ai didi

python - 如何规范化 python 中的字符串列表列表?

转载 作者:太空狗 更新时间:2023-10-29 18:23:33 25 4
gpt4 key购买 nike

我有一个表示数据网格的列表列表(想想电子表格中的行)。每行可以有任意数量的列,每个单元格中的数据是任意长度的字符串。

我想将其规范化,实际上,使每一行具有相同的列数,并且数据中的每一列具有相同的宽度,必要时用空格填充。例如,给定以下输入:

(
("row a", "a1","a2","a3"),
("another row", "b1"),
("c", "x", "y", "a long string")
)

我希望数据看起来像这样:

(
("row a ", "a1", "a2", "a3 "),
("another row", "b1", " ", " "),
("c ", "x ", "y ", "a long string")
)

python 2.6 或更高版本的 pythonic 解决方案是什么?需要明确的是:我并不是要漂亮地打印列表本身,我正在寻找一种解决方案,它返回一个新的列表列表(或元组的元组),并填充值出去。

最佳答案

从您的输入数据开始:

>>> d = (
("row a", "a1","a2","a3"),
("another row", "b1"),
("c", "x", "y", "a long string")
)

通过一次确定每列的最大大小:

>>> col_size = {}
>>> for row in d:
for i, col in enumerate(row):
col_size[i] = max(col_size.get(i, 0), len(col))

>>> ncols = len(col_size)

然后进行第二遍以将每一列填充到所需的宽度:

>>> result = []
>>> for row in d:
row = list(row) + [''] * (ncols - len(row))
for i, col in enumerate(row):
row[i] = col.ljust(col_size[i])
result.append(row)

这给出了期望的结果:

>>> from pprint import pprint
>>> pprint(result)
[['row a ', 'a1', 'a2', 'a3 '],
['another row', 'b1', ' ', ' '],
['c ', 'x ', 'y ', 'a long string']]

为方便起见,这些步骤可以合并为一个函数:

def align(array):
col_size = {}
for row in array:
for i, col in enumerate(row):
col_size[i] = max(col_size.get(i, 0), len(col))
ncols = len(col_size)
result = []
for row in array:
row = list(row) + [''] * (ncols - len(row))
for i, col in enumerate(row):
row[i] = col.ljust(col_size[i])
result.append(row)
return result

关于python - 如何规范化 python 中的字符串列表列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com