从列表中删除通配符字符串

时间:2019-01-25 11:51:52

标签: python

我有一个列表,它是一个大型重复数据集,其标题形式为:

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”,而不管字符串中还有什么内容?

2 个答案:

答案 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”是否包含在第一个列表项中,并使用它来确定是否删除第一个列表项。