加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:11:10 所属栏目:Python 来源:网络整理
导读:我有一个列表,表示数据网格(在电子表格中考虑行).每行可以有任意数量的列,每个单元格中的数据都是任意长度的字符串. 我想规范化这一点,实际上使每行具有相同数量的列,并且数据中的每列具有相同的宽度,必要时用空格填充.例如,给出以下输入: ( ("row a","a1",
我有一个列表,表示数据网格(在电子表格中考虑行).每行可以有任意数量的列,每个单元格中的数据都是任意长度的字符串.

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

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

我想要的数据如下所示:

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

python 2.6或更高版本的pythonic解决方案是什么?只是为了清楚:我不想打印列表本身,我正在寻找一个解决方案,返回一个新的列表(或元组元组)与填充的值.

解决方法

从您的输入数据开始:
>>> d = (
 ("row a","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,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读