从矩阵中的列表中删除项目

2024-05-19 00:21:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个问题。我试图从矩阵中的列表中删除一项,但当我试图从特定列表(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 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]

请帮帮我


Tags: in列表forrange矩阵mattchsp
2条回答

可以使用列表切片将矩阵中的行设置为原始行减去第一个元素的切片,而不是使用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在编辑单个列表时,也会编辑列表的其他引用

尝试通过重新实例化来复制它:

for i in range(5):
    sett.append(list(giorno))

或者以空的方式对其进行切片:

for i in range(5):
    sett.append(giorno[:])

然后它应该像预期的那样工作

此外,如果要从列表中删除前5个元素,则不应循环该列表,因为循环时会删除这些元素,并且会删除不正确的元素。 因此,只需通过执行以下操作来删除元素

del sett[i][0]

您将按预期删除前5个元素

相关问题 更多 >

    热门问题