python - 如何在 Python 中操作嵌套列表?
问题描述
我有一个类似下一个的矩阵,但更大:
m = [[38, 38, 0],
[39, 38, 0],
[40, 38, 0],
[41, 38, 3],
[42, 38, 0],
[43, 38, 4],
[44, 38, 4],
[45, 38, 5],
[38, 39, 0],
[39, 39, 0],
[40, 39, 0],
[41, 39, 3],
[42, 39, 0],
[43, 39, 4],
[44, 39, 4],
[45, 39, 5],
[38, 40, 0],
[39, 40, 0],
[40, 40, 0],
[41, 40, 3],
[42, 40, 0],
[43, 40, 4],
[44, 40, 4],
[45, 40, 5]]
我想在循环中更改前两列的值,使它们从 1 开始。
结果将是以下矩阵:
[[1, 1, 0],
[2, 1, 0],
[3, 1, 0],
[4, 1, 3],
[5, 1, 0],
[6, 1, 4],
[7, 1, 4],
[8, 1, 5],
[1, 2, 0],
[2, 2, 0],
[3, 2, 0],
[4, 2, 3],
[5, 2, 0],
[6, 2, 4],
[7, 2, 4],
[8, 2, 5],
[1, 3, 0],
[2, 3, 0],
[3, 3, 0],
[4, 3, 3],
[5, 3, 0],
[6, 3, 4],
[7, 3, 4],
[8, 3, 5]]
我很感激详细的解释,因为我是 python 新手。:)
解决方案
假设
我将在下面回答,但 StackOverflow 的一个好做法是展示您已经尝试过的内容以及您遇到的问题。另外,Python 目前有两个主要版本:2.7 和 3。我不知道您使用的是哪一个,所以我将使用 Python 3 中的示例。主要版本没有太大差异,所以有一个很好的这些示例有可能在两个版本中都有效。
正如@MK Patel 在评论中所说,我们不确定您的矩阵是每行有三个元素,还是只有一个(格式错误)。我将假设您的意思是[1, 1, 0]
而不是[1. 1. 0.]
.
答案和例子
首先,假设您的矩阵以 m 为单位:m =[[38, 38, 0.], ...]
循环遍历所有行的最简单方法是:
for row in m:
# do stuff with row
print(row[1]) # print second column
这种方法的问题是您必须自己计算自己的行数(例如,每个循环都可以增加一个变量“rowCount”)。
为了让 Python 在这里为您完成工作,您可以在矩阵的长度上迭代一个整数。这样做是这样的:
for i in range(len(m)):
# your row is now in m[i]
print(m[i][1]) # print second column
在这里,len(m)
等于数组的长度。range(n)
是包含 [0, 1..., n] 的列表的简写。这样,您可以设置行的第一列(索引 0)以匹配行数,因此该列从 1 开始,并与您的循环一起上升。请记住,Python(和大多数其他编程语言)将从 0 开始计数,因此您每次都必须加 1。
由于您想为第二列中的每个新值“重新开始”计数,您可以使用模 ( %
) 运算符让 i 在每次上升 8 时从 1 重新开始。这是基于我对您的第二列。在下一段中阅读更多内容。
for i in range(len(m)):
# set first column to i + 1, to start counting from 1 and go up every time
m[i][0] = (i % 8) + 1
对于您的第二个专栏,我也遗漏了一些信息。有几种方法可以解决您的问题,具体取决于始终正确的情况。最值得注意的是每个数字重复 8 次,所以我将在代码中使用这个事实。
我们可以使用整数除法运算符 ( //
) 为迭代器 ( i
) 上升的每 8 加一个。
for i in range(len(m)):
# set first column to i + 1, to start counting from 1 and go up every time
m[i][0] = (i % 8) + 1
# set the second column to (i // 8) + 1, going up one every 8 rows (and start at one)
m[i][1] = (i // 8) + 1
我希望这会有所帮助。
推荐阅读
- python - 在循环中等待 pool.apply_async
- kotlin - foo().collect{...} 和 launch { foo().collect{...} } 有什么区别?
- alexa-skills-kit - “请求的技能响应存在问题”
- regex - Python正则表达式如何忽略从字符串开头的搜索
- python - Django 管理命令未捕获命令行参数
- java - 如何保持 scnr.hasNext() 为真
- python - Python TCP socket on connect OSError: [Errno 102] Operation not supported on socket
- python-3.x - 无法在循环中调用函数
- iterm2 - 在iterm2中使用source ~/.bash_profile后如何解决设置变化?
- r - 如何将本地 RStudio 项目上传到 Github,包括提交历史记录?