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

Python 从列表中删除通配符字符串,python,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'] array = ['0','1','2',...,'1',

我有一个列表,它是一个大的重复数据集,其标题如下:

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']
array = ['0','1','2',...,'1','2','3',...,'header = 2','1','2','3']
如果标题字符串不变,则我可以使用以下方法删除它们:

lookup = array[0]
while True:
    try:
       array.remove(lookup)
    except ValueError:
       break
但是,如果标题字符串确实发生了更改,则不会捕获它们,我只剩下:

array = ['0','1','2',...,'1','2','3',...,'1','2','3']
array = ['0','1','2',...,'1','2','3',...,'header = 2','1','2','3']

是否有一种方法可以删除子字符串标题,而不管字符串中还有什么?

最好使用带条件的列表理解,而不是重复删除元素。另外,请使用startswith,而不是使用固定查找进行比较

>>> 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']
请注意,这不会修改现有列表,而是创建一个新的列表,但是它应该更快,因为每次删除都会增加复杂性

如果您不知道标题字符串是什么,您仍然可以从第一个元素确定它:

>>> 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']

最好使用带有条件的列表理解,而不是重复删除元素。另外,请使用startswith,而不是使用固定查找进行比较

>>> 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']
请注意,这不会修改现有列表,而是创建一个新的列表,但是它应该更快,因为每次删除都会增加复杂性

如果您不知道标题字符串是什么,您仍然可以从第一个元素确定它:

>>> 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']

使用查找方法,您可以确定单词标题是否包含在第一个列表项中,并使用该方法确定是否删除第一个项目。

使用查找方法,您可以确定单词标题是否包含在第一个列表项中,并使用该方法确定是否删除第一个列表项第一项。

这项工作非常有效,而且似乎处理得相当快。谢谢大家!@在这种情况下,请考虑接受解决问题的答案,这是完美的,而且似乎处理得很快。谢谢大家!@在这种情况下,请考虑接受解决问题的答案。