如何解决清单清单并插入
matrix1
是列表列表。我的代码检查matrix1[i][5]
和matrix1[i+1][5]
是否包含连续数字。如果是,则确定,如果不是,则在以前的i + 1处理中插入一个新列表,并更改matrix1[i+1][5]
的值,将其增加1。如果matrix1[i][5]=1
和matrix1[i+1]=4
我的代码应该在第一个matrix1[i+1]
之前和之后添加2个列表,并更改数字,所以最后我没有在1到4之间空,而是所有连续的数字和结果应该是1 2 34。但是用我的代码,结果是3 3 3 4.。有人可以帮助我吗?
for i in range(0,len(matrix1)-1):
if int(matrix1[i][5])==int(matrix1[i+1][5])-1:
continue
else:
matrix1.insert(i+1,matrix1[i])
matrix1[i+1][5]=int(matrix1[i][5])+1
解决方法
我看到两个问题:
-
当您拥有列表
a = [0,1]
并说出b = a; b[0] = 100; print(a[0])
时,仍然会得到100
的输出。为什么?因为在Python中为变量分配列表不会复制该列表!而是使新变量引用与旧变量相同的内存,因此修改一个变量将全部修改。这是您在这里犯的错误:matrix1.insert(i+1,matrix1[i])
。您可以通过bunch of ways创建副本。我将使用列表理解只是为了遍历列表遍历列表,如下所示:b = [x for x in a]
-
在迭代该列表的for循环内修改列表(插入/删除项目)是一个坏主意。相反,最好创建一个 new 列表,其中包含您关心的所有值。
假设您有一个matrix1
,如下所示:
matrix1 = [[0,1,2,3,4,1],[0,4],5],10],11]]
现在让我们定义另一个列表matrix2
,该列表现在将为空
matrix2 = []
现在,我们将每一行复制到新矩阵中。而且,如果matrix1[i][5]
和matrix1[i + 1][5]
不连续,我们还将在所有必要的新行中插入 all 到新矩阵中。
for i in range(0,len(matrix1)-1):
row = matrix1[i]
matrix2.append([x for x in row])
if int(matrix1[i][5])==int(matrix1[i+1][5])-1:
continue
else:
# Add rows from [i][5] + 1 to less than [i + 1][5]
# The third argument handles the case when [i + 1][5] is less than [i][5]
for j in range(matrix[i][5] + 1,matrix1[i + 1][5],(1 if matrix1[i + 1][5] > matrix[i][5] else -1)):
newrow = [x for x in row]
newrow[5] = j # Set col 6
matrix2.append(newrow) # Add another row
# Finally,append the last row
matrix2.append([x for x in matrix1[-1]])
print(matrix2)
这给出了输出:
[[0,2],3],6],7],8],9],11]]
或者,一种更直接的方法:我们可以简单地摆脱对连续性的检查,而拥有for j
循环,因此我们可以根据需要插入尽可能多的行,以将我们从matrix1[i][5]
带到{ {1}}。如果它们是连续的,我们最终将只插入一行。
matrix1[i + 1][5]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。