Python 从列表中存在的字符串中删除所有单词
社区 我需要编写一个函数,遍历一个字符串并检查每个单词是否存在于列表中,如果单词存在于(删除列表)中,它应该删除该单词,如果不单独保留它的话 我写道:Python 从列表中存在的字符串中删除所有单词,python,pandas,Python,Pandas,社区 我需要编写一个函数,遍历一个字符串并检查每个单词是否存在于列表中,如果单词存在于(删除列表)中,它应该删除该单词,如果不单独保留它的话 我写道: def remove_make(x): a = x.split() for word in a: if word in remove: # True a = a.remove(word) else: pass return a
def remove_make(x):
a = x.split()
for word in a:
if word in remove: # True
a = a.remove(word)
else:
pass
return a
但它返回的字符串中仍有(Remove)单词。你知道我如何做到这一点吗?更简洁的方法是根据要删除的单词列表形成一个正则表达式替换,然后进行单个正则表达式替换:
inp=“一二三四”
删除=['2','4']
regex=r'\s*(?:'+r'|'.连接(删除)+')\s*'
out=re.sub(regex',inp.strip()
打印(输出)#打印“一三”
列表。删除(x)
返回None
,并通过删除列表中存在的x
来修改列表。当你这样做的时候
a = a.remove(word)
您将在a
中有效地存储None
,这将在下一次迭代中,当您再次执行a.remove(word)
(None.remove(word)
无效)时出现异常,但您也无法获得该异常,因为在条件语句之后立即返回(这是错误的,在循环完成后,您需要在其范围之外返回)。这是您的函数应该是这样的(在迭代时不修改列表):
您可以创建一个没有要删除的单词的新列表,然后使用join()函数连接该列表中的所有单词。请重试
def remove_words(string, rmlist):
final_list = []
word_list = string.split()
for word in word_list:
if word not in rmlist:
final_list.append(word)
return ' '.join(final_list)
您可以尝试更简单的方法:
import re
remove_list = ['abc', 'cde', 'edf']
string = 'abc is walking with cde, wishing good luck to edf.'
''.join([x for x in re.split(r'(\W+)', string) if x not in remove_list])
结果是:
“正和你同行,祝你好运。”
重要的部分是最后一行:
''.join([x for x in re.split(r'(\W+)', string) if x not in remove_list])
它的作用是:
- 您正在将字符串转换为带有(r'(\W+)、字符串的单词列表,并将所有空格和标点符号保留为列表项
- 您正在使用创建另一个列表,筛选所有不在删除列表中的项目
- 您正在使用将结果列表转换回字符串
可以找到用于列表理解的BNF符号以及关于它们的更多信息
PS:当然,如果您将一行程序分解为和平,并分配re.split(r'(\W+),string)的结果,您可能会使其更具可读性添加一个变量,并将联接和理解解耦。您需要保留一份列表副本并对其进行迭代,除了您请求的答案结构和您尝试过的代码之外,您能否共享文件中的简单数据?对于我来说,您的问题不清楚。由于缺乏解释,您需要添加更多信息。字符串的简单数据以及您正在寻找的所需答案。请小心使用变量remove
,因为它不是函数的参数,也不是init定义的。拆分也会带来一些麻烦。如果拆分“I like you”。如果要删除“you”,您将得到a=['I','like','you.]
,这将失败。没有提到标点符号,我甚至不知道如何从列表中创建字符串(他们甚至不返回字符串,但列表本身顺便说一句),这个答案只是为了解决当前的问题,而不是关于如何从拆分列表中创建一个正确、合理的列表。如果我要删除这些单词,我会使用正则表达式或列表理解,我可以在答案中提到,但这不是真正的问题。我认为这个问题需要更多的细节你说得对。但我认为重要的是,标点符号会对结果产生影响。
''.join([x for x in re.split(r'(\W+)', string) if x not in remove_list])