Python 从矩阵中的列表中删除项目
我有个问题。我试图从矩阵中的列表中删除一项,但当我试图从特定列表(es.matrix[0])中删除该项时,它会从矩阵中的每个列表中删除该项 代码如下:Python 从矩阵中的列表中删除项目,python,list,matrix,indexing,del,Python,List,Matrix,Indexing,Del,我有个问题。我试图从矩阵中的列表中删除一项,但当我试图从特定列表(es.matrix[0])中删除该项时,它会从矩阵中的每个列表中删除该项 代码如下: ap = 95 sp = [125, 150] ch = 195 sett = [] giorno = [] for matt in range(ap,sp[0]+5,5): giorno.append(matt) for sera in range(sp[1],ch+5,5): giorno.append(sera) for
ap = 95
sp = [125, 150]
ch = 195
sett = []
giorno = []
for matt in range(ap,sp[0]+5,5):
giorno.append(matt)
for sera in range(sp[1],ch+5,5):
giorno.append(sera)
for i in range(5):
sett.append(giorno)
print(sett[1])
for i in range(0,5,2):
del sett[i][0]
print(sett[1])
输出:
1st printf(sett[1]):
[95, 100, 105, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195]
2nd printf(sett[1]):
[110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195]
预期产量
1st printf(sett[1]):
[95, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195]
2nd printf(sett[1]):
[95, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195]
请帮帮我 可以使用列表切片将矩阵中的行设置为原始行减去第一个元素的切片,而不是使用
del
删除元素。可以这样做:
for i in range(0,5,2):
matrix[i] = matrix[i][1:]
print(matrix)
这就是结果
[[100, 105, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195],
[95, 100, 105, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195],
[100, 105, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195],
[95, 100, 105, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195],
[100, 105, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195]]
从而删除第0、2和4行中的第一个元素。这也可以使用列表理解来缩短:
matrix = [row[1:] if i % 2 == 0 else row for i, row in enumerate(matrix)]
可以使用列表切片将矩阵中的行设置为原始行减去第一个元素的切片,而不是使用
del
删除元素。可以这样做:
for i in range(0,5,2):
matrix[i] = matrix[i][1:]
print(matrix)
这就是结果
[[100, 105, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195],
[95, 100, 105, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195],
[100, 105, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195],
[95, 100, 105, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195],
[100, 105, 110, 115, 120, 125, 150, 155, 160, 165, 170, 175, 180, 185, 190, 195]]
从而删除第0、2和4行中的第一个元素。这也可以使用列表理解来缩短:
matrix = [row[1:] if i % 2 == 0 else row for i, row in enumerate(matrix)]
这是因为您没有创建列表的浅层副本。 我不知道Python是如何共享内存和指针的,但我可以说,如果您将
giorno
列表复制到内存中,而不是将其直接附加多次,它应该可以工作。可能是因为Python在编辑单个列表时,也会编辑列表的其他引用
尝试通过重新实例化来复制它:
范围(5)内的i的:
设置附加(列表(giorno))
或者以空的方式对其进行切片:
范围(5)内的i的:
sett.append(giorno[:])
然后它应该像预期的那样工作
此外,如果要从列表中删除前5个元素,则不应循环该列表,因为循环时会删除这些元素,并且会删除不正确的元素。
因此,只需通过执行以下操作来删除元素
del sett[i][0]
您将按预期删除前5个元素。这是因为您没有创建列表的浅表副本。 我不知道Python是如何共享内存和指针的,但我可以说,如果您将
giorno
列表复制到内存中,而不是将其直接附加多次,它应该可以工作。可能是因为Python在编辑单个列表时,也会编辑列表的其他引用
尝试通过重新实例化来复制它:
范围(5)内的i的:
设置附加(列表(giorno))
或者以空的方式对其进行切片:
范围(5)内的i的:
sett.append(giorno[:])
然后它应该像预期的那样工作
此外,如果要从列表中删除前5个元素,则不应循环该列表,因为循环时会删除这些元素,并且会删除不正确的元素。
因此,只需通过执行以下操作来删除元素
del sett[i][0]
您将按预期删除前5个元素。什么是输入,什么是预期输出?不,不是。它删除了第[0,2,4]行中的第一项。请详细解释给定的输入和预期的输出。输入在这里,它应该删除第[0,2,4]行中的第一项,但它没有。它对每一行都这样做。如果你也添加代码来创建这个矩阵,那会很有帮助。输入是什么,预期输出是什么?不,不是。它删除了第[0,2,4]行中的第一项。请详细解释给定的输入和预期的输出。输入在这里,它应该删除第[0,2,4]行中的第一项,但它没有。它对每一行都这样做。如果您添加代码来说明如何创建这个矩阵,这将很有帮助。