python-3.x - 从其他列表初始化和填充 Python 中的二维数组
问题描述
我想创建二维数组并用以下信息填充它。
n = 7
j = [0, 1, 2, 3, 4, 5, 6]
k = [0, 2, 4, 3, 3, 2, 1]
l = [0 , 46, 52, 30, 36 ,56, 40]
所以,列表 L 的第一个列表应该是 b [0,0,0],列表 L 的第二个列表应该是 [1,2,46],列表 L 的第三个应该是列表 [2,4,52 ] 等等。但它不工作,它不断覆盖价值观
#!/usr/bin/python3.6
from operator import itemgetter
n = 7
j = [0, 1, 2, 3, 4, 5, 6]
k = [0, 2, 4, 3, 3, 2, 1]
l = [0 , 46, 52, 30, 36 ,56, 40]
L = [[0]*3]*n
print(L)
x = 0
y = 0
z = 0
while x < len(j):
L[x][0] = j[x]
x = x + 1
while y < len(k):
L[y][1] = k[y]
y = y + 1
while z < len(l):
L[z][2] = l[z]
z = z + 1
print (L)
当前输出是
L的初始化,没问题
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0 ], [0, 0, 0], [0, 0, 0]]
而修改后的L,很不对
[[6, 1, 40], [6, 1, 40], [6, 1, 40], [6, 1, 40], [6, 1, 40], [6, 1, 40], [6, 1, 40]]
解决方案
首先也是最重要的:
L = [[0]*3]*n
是初始化二维列表的错误方法。如果我设置l[0][0]
为1
,看看会发生什么:
n = 7
L = [[0]*3]*n
L[0][0] = 1
print(L)
输出:
[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
要正确初始化 2D 列表,请执行以下操作:
L = [[0] * 3 for _ in range(n)]
如果你把它改成这个,你的代码就可以工作了。
但实际上,您的问题可以通过更简单的方式解决。只需使用zip
:
j = [0, 1, 2, 3, 4, 5, 6]
k = [0, 2, 4, 3, 3, 2, 1]
l = [0, 46, 52, 30, 36, 56, 40]
result = [list(x) for x in zip(j, k, l)]
print(result)
输出:
[[0, 0, 0],
[1, 2, 46],
[2, 4, 52],
[3, 3, 30],
[4, 3, 36],
[5, 2, 56],
[6, 1, 40]]
推荐阅读
- c++ - 如何将 char 类型变量附加到字符串?
- rxjs - 带间隔的 concatMap 未按预期工作
- c++ - TS Concepts 类型名约束
- android - Google Play 订阅始终“待付款”
- javascript - 使用带有换行符的php字符串作为javascript变量
- angular - ngClass 正在删除加载时的选择选项
- angular - angular ionic - jwt 令牌标头发布错误
- css - 我的网站在 PC 和移动设备上的导航栏显示出现问题
- python - Python 3 BeautifulSoup 从跨度类中剥离特定值?
- python - 获取仅包含文件名的文件夹的路径