我正在编写一个小脚本,它应该格式化一些字符串,以便它们更具可读性。输入是一个列表,列表中包含字符串。输入可能看起来像这样(注意:这与图像中的输入相同,只是图像更好地对比了输入和输出):
['last name: Callum', 'first name: Brian', 'middle name: Mosbey', 'balance: $0']
每个字符串中都有一个:
。我希望 :
右侧的所有文本以相同的宽度打印,以便更容易阅读信息。我想要的输出是这样的(注意:我用方法 2 得到了这个,但用方法 1 没有):
['last name: Callum', 'first name: Brian', 'middle name: Mosbey', 'balance: $0']
这是我解决问题的方法:
首先我们遍历字符串列表并在另一个列表中存储在可以找到
:
的索引处首先我们找出哪个字符串的
highest_index
为:
我们再次遍历字符串列表(新的迭代),我们计算
的当前索引的
与差异
:的当前索引highest_index
(仍在迭代中)在我们找到
的地方的右边:
我们插入' '
*difference
问题:我有这个解决方案的 2 个实现。方法 1 较短,但不起作用。方法 2 更长,但至少有效。为什么方法 1 不起作用?
代码:
def even_spacing(lst):
new_lst = [] # list for the final output
index_colon = [] # list of the indexs where ':' is found, for each line
# find where the ':' in each line
for line_string in lst:
index_colon.append(line_string.find(':'))
highest_index = max(index_colon) # the highest index ':' can be found at in any of the lines
# we add the extra spaces
for index, s in enumerate(lst):
difference = highest_index - index_colon[index] # how many spaces will be needed
# METHOD 1 not working, less code
# new_lst.append(''.join(list(s).insert(index_colon[index]+1, ' '*difference))) # insert at the index we found the proper number of spaces
# METHOD 2, working, but more code
list_letters = list(s)
list_letters.insert(index_colon[index]+1, ' '*difference)
new_lst.append(''.join(list_letters))
return new_lst
test = ['last name: Callum', 'first name: Brian', 'middle name: Mosbey', 'balance: $0']
print even_spacing(test)
最佳答案
列表的 insert
方法就地起作用(改变列表,并且不返回它)并返回 None
:
>>> a = [1,2,3]
>>> b = a.insert(1, "inserted")
>>> print a
[1, 'inserted', 2, 3]
>>> print b
None
所以你不能链接涉及.insert
的操作,这就是为什么
''.join(list(s).insert(index_colon[index]+1, ' '*difference))
不会工作。这基本上是 ''.join(None)
。
您的第二种方法有效,因为您正在调用 insert
但没有尝试处理它返回的内容。
关于python - 以相同的宽度打印 ":"右侧的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21499779/