Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否使用python删除列表中的特定字符串元素?_Python_Regex_List_Parsing_Sorting - Fatal编程技术网

是否使用python删除列表中的特定字符串元素?

是否使用python删除列表中的特定字符串元素?,python,regex,list,parsing,sorting,Python,Regex,List,Parsing,Sorting,我有以下清单: L = [('carga', 'NCFS000', 'superior', 'AQ0CS0'),('carga', 'NCFS000', 'frontal', 'AQ0CS0')] 如何删除“NCFS000”、“AQ0CS0”和方括号?如下所示: [('carga', 'superior'),('carga', 'frontal')] L = [('carga', 'NCFS000', 'superior', 'AQ0CS0'),('carga', 'NCFS000', 'f

我有以下清单:

L = [('carga', 'NCFS000', 'superior', 'AQ0CS0'),('carga', 'NCFS000', 'frontal', 'AQ0CS0')]
如何删除
“NCFS000”、“AQ0CS0”和方括号?如下所示:

[('carga', 'superior'),('carga', 'frontal')]
L = [('carga', 'NCFS000', 'superior', 'AQ0CS0'),('carga', 'NCFS000', 'frontal', 'AQ0CS0')]

def remove_values_from_list(the_list, val):    
    return [tuple(value for value in inner_list if value not in val) for inner_list in the_list]

print "Esta es el bigrama final:\n",\
    remove_values_from_list(L, ['NCFS000','AQ0CS0'])
这就是我所尝试的:

def remove_values_from_list(the_list, val):
   return [value for value in the_list if value != val]

print "Esta es el bigrama final:\n",\
    remove_values_from_list(L, 'NCFS000')
但是id仍然在列表中,我如何删除id并以所需格式获取所有单词?。如何为此任务声明正则表达式?。谢谢

您可以使用和:


这里的问题是您有一个嵌套的集合,但没有嵌套的循环。顶级列表没有任何值,因此在删除所有这些值后,没有任何更改

您想要的是:对于列表中的每个元组,删除每个值
==“NCFS000”
,对吗?这里有两个“each”e,因此在代码中的某个地方需要两个
for
s

def remove_values_from_list(the_list, val):
    return [[value for value in the_sublist if value != val]
            for the_sublist in the_list]
当然,这会给您一个列表列表,而不是您开始使用的元组列表。如果这是一个问题,Python没有“元组理解”,但它有
tuple
构造函数和生成器表达式,这已经足够好了:

def remove_values_from_list(the_list, val):
    return [tuple(value for value in the_sublist if value != val)
            for the_sublist in the_list]

您只需迭代元组,而不是值本身。如果要一次删除多个值,可以这样做:

[('carga', 'superior'),('carga', 'frontal')]
L = [('carga', 'NCFS000', 'superior', 'AQ0CS0'),('carga', 'NCFS000', 'frontal', 'AQ0CS0')]

def remove_values_from_list(the_list, val):    
    return [tuple(value for value in inner_list if value not in val) for inner_list in the_list]

print "Esta es el bigrama final:\n",\
    remove_values_from_list(L, ['NCFS000','AQ0CS0'])

在您的代码中给定
值!=va
'NCFS000'
('carga'、'NCFS000'、'superior'、'AQ0CS0')进行比较,例如,没有给出所需的结果。您需要有一个嵌套的列表

此代码基于正则表达式进行筛选

import re
def remove_values_from_list(the_list, regex):
   return [tuple(val for val in value if re.match(regex, val)) for value in the_list]
print remove_values_from_list(L, r'^[a-z]+$')
我不能发表评论,所以我必须在这里发表评论。。。
我对正则表达式的使用与abarnert的想法不同。他考虑将数据结构转换为字符串,然后在其上运行正则表达式。正如他所说,这将是荒谬的。但是我在数据结构中的字符串上运行一个正则表达式。我认为我们双方都同意这一点是好的。

您可以通过以下项目组成您的函数:

L = [('carga', 'NCFS000', 'superior', 'AQ0CS0'),('carga', 'NCFS000', 'frontal', 'AQ0CS0')]
r = frozenset(['NCFS000', 'AQ0CS0'])
result = [filter(lambda i: i not in r, t) for t in L]

,结果就是您所期望的。

如何“为该任务声明正则表达式”是一个错误的问题。处理已解析为良好数据结构的数据几乎总是比将该数据结构转换为字符串并尝试将其正则化为可以解析回不同数据结构的内容更容易。因此,使用数据结构而不是正则化更有效吗?首先,“更有效”几乎总是完全无关;如果它们都是线性时间,而这不是瓶颈,谁在乎哪一个更快?但是,是的,在极少数情况下,使用您已有的数据结构通常比将其表示为字符串、使用正则表达式并重新解析它更有效。更重要的是,它几乎肯定会更易于阅读、理解、扩展和调试,对于您和其他需要处理您的代码的人来说。这只有在不需要的项的位置固定时才有效,而不是在您希望按值删除这些项的情况下。