什么是最有效的(pythonic)方式来忽略列表中有偏执的单词?

2024-10-01 11:39:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下清单

x = ['Accara building model (ABM)','tri-com model (tcm)']

使用re,我可以忽略括号中的单词。就像下面一样

import re 
x = ['Accara building model (ABM)','tri-com model (tcm)']
for i in x:
    ko= list(re.sub("[\(\[].*?[\)\]]", "", i))
    print (ko)

但我得到的输出格式如下

['A', 'c', 'c', 'a', 'r', 'a', ' ', 'b', 'u', 'i', 'l', 'd', 'i', 'n', 'g', ' ', 'm', 'o', 'd', 'e', 'l', ' ']
['t', 'r', 'i', '-', 'c', 'o', 'm', ' ', 'm', 'o', 'd', 'e', 'l', ' ']

理想情况下,我想要的是尽可能少的代码行。(我知道我的代码目前效率低下)

需要理想输出

['Accara building model', 'tri-com model']

Tags: 代码importrecomformodel单词tri
3条回答
import re
x = ['Accara building model (ABM)','tri-com model (tcm)']

print([ "".join(list(re.sub("[\(\[].*?[\)\]]", "", i))) for i in x ])


python test
['Accara building model ', 'tri-com model ']

你就快到了,试试这个:

import re
x = ['Accara building model (ABM)','tri-com model (tcm)']
output = []
for i in x:
    ko= re.sub("[\(\[].*?[\)\]]", "", i)
    output.append(ko)

输出output列表如下

["Accara building model", "tri-com model"]

当您使用list(re.sub(...))时,基本上是将输出字符串(替换后)转换为列表格式。你知道吗

不应该使用list(),但应该在循环之前创建空列表,并将结果附加到此列表

import re

x = ['Accara building model (ABM)','tri-com model (tcm)']
results = []

for i in x:
    ko = re.sub("[\(\[].*?[\)\]]", "", i)
    resutls.append(ko.strip())

print(results)

结果

['Accara building model', 'tri-com model']

你甚至可以使用列表理解

import re

x = ['Accara building model (ABM)','tri-com model (tcm)']

results = [re.sub("[\(\[].*?[\)\]]", "", i).strip() for i in x]

print(results)

顺便说一句:我使用strip()删除结尾处的空格。但是可以用regex删除这个空格,regex以空格" [\(\[].*?[\)\]]"开头。你知道吗


编辑:正如Mark Meyer在comment中建议的那样,您还可以编译regex,这样就不必在每个循环中都编译它了。你知道吗

x = ['Accara building model (ABM)','tri-com model (tcm)']

pattern = re.compile(" [\(\[].*?[\)\]]")
results = [re.sub(pattern, "", i) for i in x]

print(results)

顺便说一句:如果您确定elments总是具有相同的结构,那么您可以不使用regex而使用split(' (')删除它

x = ['Accara building model (ABM)','tri-com model (tcm)', 'name without parentheses']

results = [i.split(' (',1)[0] for i in x]

print(results)

相关问题 更多 >