繁体   English   中英

如何在嵌套列表理解中打印新行?

[英]How to print new line in nested list comprehension?

我是python的新手。 我想使用列表理解来显示两个骰子的可能性。 我得到了输出。 但是当 y 达到 6(y==6) 时是否可以打印新行?

我的编码:

d1=(1,2,3,4,5,6) 
d2=(1,2,3,4,5,6) 
print([(x,y) for x in d1 for y in d2])

我的输出:

[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)]

我的期望输出:

[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), 
(2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), 
(3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), 
(4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), 
(5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), 
(6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)]

Print 有一个可选参数end这通常是一个新行,但您可以修改它,使其成为一个空格或任何您想要的。 您可以使用它来重新创建所需的输出:

d1=(1,2,3,4,5,6)
d2=(1,2,3,4,5,6)
# this is bad style and should be avoided because of side effects (see comments)
([print((x,y), end='\n' if y==len(d2) else ' ') for x in d1 for y in d2]) 

无副作用更好:

for tup in [(x,y) for x in d1 for y in d2]:
    print(tup, end='\n' if tup[1]==len(d2) else ' ')

输出:

(1, 1) (1, 2) (1, 3) (1, 4) (1, 5) (1, 6)
(2, 1) (2, 2) (2, 3) (2, 4) (2, 5) (2, 6)
(3, 1) (3, 2) (3, 3) (3, 4) (3, 5) (3, 6)
(4, 1) (4, 2) (4, 3) (4, 4) (4, 5) (4, 6)
(5, 1) (5, 2) (5, 3) (5, 4) (5, 5) (5, 6)
(6, 1) (6, 2) (6, 3) (6, 4) (6, 5) (6, 6)

如果您真的想要一个真实的列表输出(带有所有特殊字符(“,”,“[”,“]”),那么您也可以通过更多的工作来做到这一点:

def print_nice_list(d1,d2):
    print("[",end="")
    for tup in [(x,y) for x in d1 for y in d2]:
        end = ", "
        if tup[1] == len(d2) and tup[0]==len(d1):
            end = "]"
        elif tup[1] == len(d2):
            end = ",\n"
        print(tup, end=end )

print_nice_list(d1,d2) 

输出:

[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6),
(2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6),
(3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6),
(4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6),
(5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6),
(6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)]

编辑:根据评论重新编写了答案。

如果这只是为了可视化,你应该使用pprint

>>> import pprint
>>> lst = [(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)]
>>> pprint.pprint(lst, compact=True, width=50)
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6),
 (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6),
 (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6),
 (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6),
 (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6),
 (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)]

暂无
暂无

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

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