繁体   English   中英

如何并排打印列表中的字符串?

[英]How do I print strings in a list side-by-side?

我有一个字符串列表的输入,我不确定如何并排打印列表中的每个字符串,并在每个字符串下方添加连字符。

示例输入:

['13 + 11', '12 - 4', '36 + 18']

所需的 output:

  13     12      36

+ 11    - 4    + 18

我试过的:

我尝试使用for循环遍历输入列表中的字符串,并将它们拆分为一个空格:

for i in problems:
    j = i.split(' ')
    print(j)

Output 从尝试这个:

['13', '+', '11']
['12', '-', '4']
['36', '+', '18']

我尝试结合splitjoin方法来更改 output,但我缺少一些关键知识。 我不知道如何并排打印字符串。 我觉得这与包含换行符有关,但除此之外我遇到了麻烦。

正如您所发现的,使用split会得到这样的结果:

>>> l = ['13 + 11', '12 - 4', '36 + 18']
>>> list(map(str.split, l))
[['13', '+', '11'], ['12', '-', '4'], ['36', '+', '18']]

现在您可以使用zip()来获取索引匹配元素:

>>> list(zip(*map(str.split, l)))
[('13', '12', '36'), ('+', '-', '+'), ('11', '4', '18')]

现在只需循环打印它:

>>> for row in zip(*map(str.split, l)):
...     print(*row, sep='\t')
    
13  12  36
+   -   +
11  4   18

为了更接近您的要求,您只能split一次(使用maxsplit参数)并稍微格式化 output :

l = ['13 + 11', '12 - 4', '36 + 18']
for row in zip(*[s.split(' ', 1) for s in l]):
    print(*[f"{num:>6}" for num in row])

会给:

    13     12     36
  + 11    - 4   + 18

为了得到你想要的 output,我试过这个:

join_spaces = '    '
mylist = ['13 + 11', '12 - 4', '36 + 18']
top = []
bottom = []

for each in mylist:
    number1, number2 = each.split(' ', 1)
    bottom.append(number2)
    top.append(number1)

for t in range(len(top)):
    length = " " * (len(bottom[t]) - len(top[t]))
    top[t] = length + top[t]

print(join_spaces.join(top))
print(join_spaces.join(bottom))

不是最干净的方法(写得很快)

解释:对于列表中的每个值,使用 split(' ', 1) 在第一次出现空格处进行拆分; 这将是第一个数字(13、12、36)。 然后将此添加到顶部列表,并将 append rest(“+ 11”,“- 4”,“+ 18”)添加到底部列表。 然后,对于列表顶部的每个值,从顶部 (13, 12, 36) 中减去底部的长度 (“+ 11”、“- 4”、“+ 18”),然后将该数字乘以一个空格. 然后,将空格添加到顶部列表中每个值的开头,并将列表打印为字符串(连接)

输出:

  13     12      36
+ 11    - 4    + 18

假设您的表达式始终采用“a '操作' b”的形式:

problems = ['13 + 11', '12 - 4', '36 + 18']

split_problems = []
for i in problems:
    j = i.split(' ')
    split_problems.append(j)

result = ""

for i in range(len(split_problems)):
    result += split_problems[i][0] + " "

result += '\n'

for i in range(len(split_problems)):
    result += split_problems[i][1] + "" + split_problems[i][2] + " "

print(result)

解决方案说明:

首先像你一样把整个东西分成几部分,得到一个像[['13', '+', '11'], ['12', '-', '4'], ['36', '+', '18']]

然后遍历外部元素并打印每个第一个条目,或者在这种情况下 append 将它们打印到结果字符串。 然后再次循环外部元素并在每次迭代或 append 将它们打印到结果字符串中的每个第 2 和第 3 个元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM