我有许多通过读取 CSV 创建的列表,其中每个索引代表一个数据点。所以:
# names = ['name1','name2', 'name3', 'name4']
# data1 = ['1', '2', '3', '4']
# data2 = ['a', 'b', 'c', 'd']
相当于:
名称1,1,a
我需要删除某些数据点,最简单的方法似乎是通过索引:
del names[1]
del data1[1]
del data2[1]
# names = ['name1', 'name3', 'name4']
但是,我正在使用索引对列表进行迭代,并且在循环完成之前不想更改它们。我的解决方案是将要删除的项目替换为唯一的字符串,然后再将其删除:
names[1] = 'DELETEME'
data1[1] = 'DELETEME'
data2[1] = 'DELETEME'
# names = ['name1','DELETEME', 'name3', 'name4']
这是一种合理的做法还是我应该做其他事情?
编辑哇,感谢所有的回复。我需要一些时间来测试不同的方法。对于那些询问的人,这里有一个额外的代码片段:
# read CSV file. create lists
names = ['name1', 'name2', 'name3', 'name4']
data1 = [1, 32.018, 3, 4]
data2 = [5, -22, 6, 7]
# master list of names to look for
master = ['name2', 'name5']
for i,n in enumerate(names):
# find intersections with master list, get indices
# ...
matches = [1] # index of 'names2'
# iterate through matches
for m in matches:
# specify a criterion for deleting/modifying data points
# example:
if data1[m] == 32.018 and data2[m] == -22:
del names[m]
del data1[m]
del data2[m]
# specify additional criteria using additional if statements
# ...