Python列表推导式生成含5的多米诺骨牌列表出错,如何修正?
问题:Python列表推导式生成多米诺骨牌列表出错
我正在练习使用Python列表推导式,目标是生成包含数字5的多米诺骨牌列表,期望结果为:
[[5, 0], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6]]
课程里只展示过用range生成递增嵌套列表的示例,比如[[1,2,3], [1,2,3]]。我尝试了以下代码:
x = [val for val in range(0,7)] Fives = [[5,x] for pieces in range(0,7)] print(Fives)
但得到的错误结果是:
[[5, [0, 1, 2, 3, 4, 5, 6]], [5, [0, 1, 2, 3, 4, 5, 6]], [5, [0, 1, 2, 3, 4, 5, 6]], [5, [0, 1, 2, 3, 4, 5, 6]], [5, [0, 1, 2, 3, 4, 5, 6]], [5, [0, 1, 2, 3, 4, 5, 6]], [5, [0, 1, 2, 3, 4, 5, 6]]
请问代码哪里出错了,该如何修正?
问题分析与修正
错误原因
- 你定义的
x是包含0到6的完整列表,在列表推导式中直接使用x会把整个列表作为子列表的第二个元素,而非单个数字; - 列表推导式中的变量
pieces未被使用,循环只是重复生成7次相同的[5, x]子列表。
修正方案
直接在列表推导式中遍历range(0,7)的每个元素,将其作为子列表的第二个值,无需提前定义x:
Fives = [[5, num] for num in range(0,7)] print(Fives)
运行后即可得到期望结果:
[[5, 0], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6]]
如果一定要保留x的定义,也可以遍历x中的每个元素:
x = [val for val in range(0,7)] Fives = [[5, num] for num in x] print(Fives)
内容的提问来源于stack exchange,提问作者superavd88
相关产品推荐
相关产品推荐

