Python中将嵌套循环转换为列表推导式的问题求助
搞定嵌套循环转列表推导式的问题,顺便实现你要的输出效果
嘿,先给你提个原代码里的小细节:你用input拿到的n是字符串类型,直接丢进range里会报错哦,得先转成整数:n = int(input('enter any number: '))。
接下来看你的需求:原来的嵌套循环生成的是二维列表,但你要的是把所有元素平铺成一维,再输出成空格分隔的字符串。我们可以用列表推导式轻松搞定,分两步或者一步到位都行。
先转成二维列表的推导式(和原循环逻辑完全一致)
原循环里,外层i从1到n,内层j从0到i-1,每个i对应一个子列表。转成列表推导式就是这样:
a = [[i + ((9 - j) * j) // 2 for j in range(0, i)] for i in range(1, n+1)]
比如n=5时,a就是[[1], [2,6], [3,7,10], [4,8,11,13], [5,9,12,14,15]],和原循环生成的结果一模一样。
扁平化并输出
要得到你想要的一维序列,再用一层推导式把二维列表拆平:
flat_list = [num for sublist in a for num in sublist]
然后把列表元素转成字符串,用空格连起来输出:
print(' '.join(map(str, flat_list)))
一步到位的简洁写法
嫌两步麻烦?直接把两层循环合并成一个推导式,直接生成一维列表,效率还更高:
n = int(input('enter any number: ')) flat_list = [i + ((9 - j) * j) // 2 for i in range(1, n+1) for j in range(0, i)] print(' '.join(map(str, flat_list)))
输入n=5跑一下,就能得到你要的结果:1 2 6 3 7 10 4 8 11 13 5 9 12 14 15。
这里要注意推导式里的循环顺序哦,和原嵌套循环保持一致:外层for i...在前,内层for j...在后,这样元素的顺序才不会乱~
内容的提问来源于stack exchange,提问作者GUNJAN ARORA
相关产品推荐
相关产品推荐

