mba*_*a12 5 python list-comprehension
我是列表理解的新手,并希望将以下代码中的for循环复制到嵌套列表理解中.
master = []
inner = []
for x in range(1,8):
inner = []
for y in range(1,x+1):
inner.append(str(x*y).rjust(2))
master.append(inner)
for m in master:
print ' '.join(m)
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
Run Code Online (Sandbox Code Playgroud)
我想的是:
test = [
[str(x*y).rjust(2) for x in range(1,8)]
for y in range(1,x+1)
]
for t in test:
print ' '.join(t)
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个追溯错误:
Traceback (most recent call last):
File "python", line 3, in <module>
NameError: name 'x' is not defined
Run Code Online (Sandbox Code Playgroud)
任何蟒蛇专家都想指出我正确的方向?
先感谢您!
您可以使用以下嵌套列表推导:
answer = [[i*j for i in range(1, j+1)] for j in range(1, 8)]
print(answer)
Run Code Online (Sandbox Code Playgroud)
产量
[[1],
[2, 4],
[3, 6, 9],
[4, 8, 12, 16],
[5, 10, 15, 20, 25],
[6, 12, 18, 24, 30, 36],
[7, 14, 21, 28, 35, 42, 49]]
Run Code Online (Sandbox Code Playgroud)
你切换了for循环。只需将它们切换回来即可:
test = [
[str(x*y).rjust(2) for y in range(1,x+1)]
for x in range(1,8)
]
for t in test:
print ' '.join(t)
Run Code Online (Sandbox Code Playgroud)
原因是您需要为每个 一个新列表x,但内部列表的数字与 一样多y。
| 归档时间: |
|
| 查看次数: |
9225 次 |
| 最近记录: |