将字符串填充到列表中的相同长度

时间:2017-07-15 17:01:26

标签: python string list

我有一个从文件中读取的字符串列表。每个元素都是一行文件。 我想要一个具有相同长度的字符串数组。我想找到最长的字符串并重新格式化其他字符串,只要最长的字符串(在它们的末尾有空格)。 现在我发现最长的一个。但我不知道如何重新格式化其他字符串。请有人帮帮我吗?

with open('cars') as f:
    lines = f.readlines()
lines = [line.rstrip('\n') for line in open('cars')]
max_in=len(lines[0])
for l in lines:
    print (str(len(l))+" "+str(max_in))
    if max_in < len(l):
        max_in=len(l)
print max_in

5 个答案:

答案 0 :(得分:6)

从这开始:

In [546]: array = ['foo', 'bar', 'baz', 'foobar']

使用max查找最大字符串的长度:

In [547]: max(array, key=len) # ignore this line (it's for demonstrative purposes)
Out[547]: 'foobar'

In [548]: maxlen = len(max(array, key=len))

现在,使用列表理解并填充左侧:

In [551]: [(' ' * (maxlen - len(x))) + x for x in array]
Out[551]: ['   foo', '   bar', '   baz', 'foobar']

答案 1 :(得分:6)

假设您已从文件中读取了字符串列表,则可以使用str.rjust()填充字符串:

>>> lines = ['cat', 'dog', 'elephant', 'horse']
>>> maxlen = len(max(lines, key=len))
>>> 
>>> [line.rjust(maxlen) for line in lines]
['     cat', '     dog', 'elephant', '   horse']

您还可以更改填充中使用的字符:

>>> [line.rjust(maxlen, '0') for line in lines]
['00000cat', '00000dog', 'elephant', '000horse']
>>> 

答案 2 :(得分:2)

1)找到max len:

max_len = max(len(el) for el in lines)

2)在其他字符串的末尾添加空格:

lines = [" "*(max_len - len(el)) + el for el in lines]

答案 3 :(得分:2)

你读了两次文件。第一次,数据从未使用过。您可以使用max查找添加空格的最大值和格式:

with open('cars') as f:
    lines = [line.rstrip('\n') for line in f]
width = max(map(len, lines))
lines = ["{0:>{1}s}".format(line, width) for line in lines]

答案 4 :(得分:0)

感谢所有答案,我编辑我的代码:

with open('cars') as f:
    lines = f.readlines()
lines = [line.rstrip('\n') for line in open('cars')]
max_line_len = len(max(lines, key=len))
new_lines = [line.ljust(max_line_len) for line in lines]