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

时间:2014-10-16 18:41:31

标签: python regex list parsing sorting

我有以下列表:

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

如何删除'NCFS000', 'AQ0CS0'和方括号?,如下所示:

[('carga', 'superior'),('carga', 'frontal')]

这是我所有人已经准备好的尝试:

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并获得所需格式的所有单词?我如何为此任务声明正则表达式?感谢

5 个答案:

答案 0 :(得分:1)

您可以使用list comprehensionslicing

>>> L = [('carga', 'NCFS000', 'superior', 'AQ0CS0'),('carga', 'NCFS000', 'frontal', 'AQ0CS0')]
>>> [x[::2] for x in L]
[('carga', 'superior'), ('carga', 'frontal')]
>>>

答案 1 :(得分:0)

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

你想要的是:对于列表中的每个元组,删除每个值== 'NCFS000',对吧?你有两个“每个”,所以你的代码中需要两个for

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]

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

在给定value != 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的想法不同。他考虑将数据结构转换为字符串,然后在其上运行正则表达式。他说,那将是荒谬的。但我正在运行数据结构中字符串的正则表达式。我认为我们都同意这一点很好。

答案 4 :(得分:0)

您可以通过以下项目撰写您的功能:

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]

,结果就是你所期望的。