我有一个列表,它是一个大型重复数据集,其标题形式为:
array = ['header = 1','0','1','2',...,'header = 1','1','2','3',...,'header = 2','1','2','3']
标题字符串可以在每个单独的数据集之间变化,但是单独的数据集的大小没有变化。
我想删除所有标题,以便留着:
array = ['0','1','2',...,'1','2','3',...,'1','2','3']
如果标题字符串不变,那么我可以使用以下方法将其删除:
lookup = array[0]
while True:
try:
array.remove(lookup)
except ValueError:
break
但是,如果标头字符串确实发生了变化,那么它们不会被捕获,而我会留下:
array = ['0','1','2',...,'1','2','3',...,'header = 2','1','2','3']
有没有一种方法可以删除子字符串“ header”,而不管字符串中还有什么内容?
答案 0 :(得分:3)
最好使用带有条件的列表理解,而不是重复删除元素。另外,请使用startswith
而不是使用固定的lookup
进行比较。
>>> array = ['header = 1','0','1','2','header = 1','1','2','3','header = 2','1','2','3']
>>> [x for x in array if not x.startswith("header")]
['0', '1', '2', '1', '2', '3', '1', '2', '3']
请注意,这不会修改现有列表,而是创建一个新列表,但由于每个remove
都具有O(n)复杂度,因此应该更快。
如果您不知道标题字符串是什么,仍然可以从第一个元素中确定它:
>>> lookup = array[0].split()[0] # use first part before space
>>> [x for x in array if not x.startswith(lookup)]
['0', '1', '2', '1', '2', '3', '1', '2', '3']
答案 1 :(得分:0)
使用find()方法,您可以确定单词“ header”是否包含在第一个列表项中,并使用它来确定是否删除第一个列表项。