所以这是一个更大的数据集的一部分,但我在这里简化了它。假设你有以下代码。我要做的是根据中间元素(dataStore就是为了这个)提取子数组。请注意,我知道列表的易变性,当我删除行[1]时,我会永久地影响数据
dataStore = []
data = [[1,3,7], [1,0,1],[2,0,2],[9,0,9], [3,1,9]]
print(data)
for index in range(0, 5):
temp = []
for row in data:
if row[1] == index:
del row[1]
temp.append(row)
del data[ data.index(row)]
dataStore.append(temp)
输出为:
Data: [[2, 0, 2]]
DataStore: [[[1, 1], [9, 9]], [[3, 9]], [], [[1, 7]], []]
现在数据应该在我完成之后是空的,这里的错误是(2,0,2)没有被删除,因为它与刚刚被删除的东西背靠背。你怎么避开这个?你知道吗
我是如何处理事情的:我觉得原因是当你做del data[ data.index(row)]
的时候,它把所有的东西都上移了一步,但是行仍然在向前迭代。所以我在想第二个镜像列表的解决方案,但是我不知道它的语法
你的感觉是对的。作为一个经验法则,如果你正在遍历一个列表,你永远不应该修改它。你知道吗
如果我正确地理解了您的问题,那么代码的最终结果是,您应该在数据存储中有一个数组,该数组是数据中的每个元素,按中间元素排序,并删除中间元素。如果是这样的话,我会尝试一些简单的方法,比如:
完成后是否需要
data
数组为空?我不确定,但也许这就是你想要的:所有内容都存储在新的
dataStore
数组中,而不是删除当前的data
数组。如果你在一个数组上迭代,你永远不想在这样做的时候修改它。输出应该是:[[1, 1], [2, 2], [9, 9], [3, 9], [1, 7]]
请注意,这并不是最有效的方法,但除非处理非常大的数据集,否则您不会注意到。你知道吗
相关问题 更多 >
编程相关推荐