【问题标题】:traverse and printing strings in python column wise [closed]以python列方式遍历和打印字符串[关闭]
【发布时间】:2017-06-20 16:52:56
【问题描述】:

有没有办法在 Python 中打印字符串以获取字符列?

也许像 [ [ o n ] , [ * o ] ] 如下 输入在数组或列表中作为矩阵形式的一系列单词给出

开启 *o 输出应按列如下所示

  1. o
  2. 没有

【问题讨论】:

  • 你有什么问题?您能否修改和澄清您的示例输入和预期输出?如果有帮助,python 字符串支持切片和索引,例如:'david'[0] >> 'd''david'[-2:] >> 'id'
  • [[on], [s o]] 应该打印 1.os, 2.no
  • 请参阅How to Ask 并考虑添加minimal reproducible example
  • 请避免扩展 cmets,并edit您的问题清楚。
  • 对于初学者:在您提出的问题中没有实际的 strings,至少在您提出的问题中没有 as[[o n],[* o]] 不是有效的 Python 代码。

标签: python string


【解决方案1】:

你可以这样做:

from itertools import zip_longest

strings = ['First,', 'long second,', 'and third!']

lines = zip_longest(*strings, fillvalue=' ')
for line in lines:
    print(''.join(line))

Fla
ion
rnd
sg 
t t
,sh
 ei
 cr
 od
 n!
 d 
 , 

zip_longest 允许您迭代每个字符串,将空格作为fillvalue 添加到最短的字符串。

list(lines) 将是 `[('F', 'l', 'a'), ('i', 'o', 'n'), ...]

然后我们可以通过连接每个元组中的字母来打印每一行。

您可以在列之间添加空格:

for line in lines:
    print('  '.join(line))

F  l  a
i  o  n
r  n  d
s  g   
t     t
,  s  h
   e  i
   c  r
   o  d
   n  !
   d   
   ,   

如果您不想打印*,只需将它们替换为空格即可:

from itertools import zip_longest
strings = ['ant', '*oi', '**p']
lines = zip_longest(*strings, fillvalue=' ')


for line in lines:
    print(''.join(line).replace('*',' '))
# a    
# n o  
# t i p

【讨论】:

  • 谢谢你,当有 * 时它不应该打印它,如果给定 1.ant 2.*oi 3.**p 那么它应该打印 1.a 然后 2。没有那么 3. 小费
  • 只需用空格替换星星,见编辑。
【解决方案2】:

当然,只要正确安排索引即可:

li = [["a","b"],["c","d"]]
for i in range(len(li[0])):
    for j in range(len(li)):
        print(li[j][i],end='')
    print()

我不确定您的 * 在该列表中做什么。从输出看来,您的意思是它是列表中的一个空白点?

【讨论】:

  • 谢谢,但我想要的不是字母,而是单词,请帮助我
猜你喜欢
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 2019-06-06
  • 1970-01-01
  • 2013-08-29
  • 2020-09-04
  • 1970-01-01
相关资源
最近更新 更多