按特定方向打印嵌套列表 - Python

3
我正在尝试用Python制作图形设计,更具体地说是ASCII“横幅”字。每个字母由字符的嵌套行列表组成。
 [[' _______ ', '(       )', '| () () |', '| || || |', '| |(_)| |', '| |   | |', '| )   ( |', '|/     \\|'], [' _______ ', '(  ____ \\', '| (    \\/', '| (__    ', '|  __)   ', '| (      ', '| (____/\\', '(_______/']]

等价于将每个嵌套列表向下打印,并将整个内容横向打印,它们就组成了一个单词。 我在按照上述方法进行打印时遇到了问题。 先行感谢!


你能展示一下你目前尝试过的吗? - Wander Nauta
你想打印列表中的每个元素吗?不清楚你的问题是什么。 - The6thSense
2个回答

9
如果你想从左到右打印字母,你需要使用zip将列表与自身合并,有效地"转置"它。这样,第一个列表将包含所有第一行,第二个列表将包含所有第二行,以此类推。现在只需join它们,就完成了。
>>> ascii = [[' _______ ', '(       )', '| () () |', '| || || |', '| |(_)| |', '| |   | |', '| )   ( |', '|/     \\|'], [' _______ ', '(  ____ \\', '| (    \\/', '| (__    ', '|  __)   ', '| (      ', '| (____/\\', '(_______/']]
>>> print '\n'.join((' '.join(line) for line in zip(*ascii))) 
 _______   _______ 
(       ) (  ____ \
| () () | | (    \/
| || || | | (__    
| |(_)| | |  __)   
| |   | | | (      
| )   ( | | (____/\
|/     \| (_______/

如果您想从上到下打印字母,可以使用以下方法:

>>> print '\n\n'.join(('\n'.join(line) for line in ascii))

这非常好。如果''.join(line)被替换为' '.join(line),则两个字母之间会有漂亮的间距。 - John Coleman
这正是我想要的。非常感谢! - dcarroll9999

2

虽然不清楚你所需的确切输出内容,但我认为你可以受益于使用string.join()函数。

编辑

啊哈,现在已经清楚你要做什么了。使用@tobias_k的解决方案,我建议你通过类似以下方式轻松编辑你的信件:

m = """
 _______  
(       ) 
| () () | 
| || || | 
| |(_)| | 
| |   | | 
| )   ( | 
|/     \| 
""".split('\n')

e = """
 _______  
(  ____ \ 
| (    \/ 
| (__     
|  __)    
| (       
| (____/\ 
(_______/ 
""".split('\n')

lines = zip(m,e,m,e)   # Spell the word you want here
print '\n'.join(' '.join(line) for line in lines)

输出结果:
 _______    _______    _______    _______  
(       )  (  ____ \  (       )  (  ____ \ 
| () () |  | (    \/  | () () |  | (    \/ 
| || || |  | (__      | || || |  | (__     
| |(_)| |  |  __)     | |(_)| |  |  __)    
| |   | |  | (        | |   | |  | (       
| )   ( |  | (____/\  | )   ( |  | (____/\ 
|/     \|  (_______/  |/     \|  (_______/ 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接