为什么“ strip(,.)”也不会剥离“,”?

时间:2019-04-08 15:03:02

标签: python

我正在kaggle.com上执行此python教程。这是我当前的任务:

“研究人员已经收集了数千篇新闻文章。但是,她希望将注意力集中在包括特定单词的文章上。完成以下功能可以帮助她过滤文章列表。

您的功能应满足以下条件

  • 请勿包括关键字字符串仅作为较大单词的一部分显示的文档。例如,如果她正在寻找关键字“ closed”,则不会包含字符串“ enclosed”。
  • 她不希望您区分大写字母和小写字母。因此,当关键字为“已关闭”时,将包括短语“已关闭案件”。
  • 请勿让句号或逗号影响匹配的内容。关键字为“关闭”时,将包含“关闭。”。但是您可以假设没有其他类型的标点符号。”

这是我尝试过的:

def word_search(doc_list, keyword):
    mylist = []

    for ele in doc_list:
        if len([ele for ele in ele.lower().strip(".,").split() if ele == keyword.lower()]) > 0:
            mylist.append(doc_list.index(ele))

    return mylist

但是这个例子

doc_list=['The Learn Python Challenge Casino.', 'They bought a car, and a horse', 'Casinoville?']
word_search(doc_list, 'car')

给我[]而不是期望的[1](因为第二个字符串中包含“汽车”)。

为了调试,我将代码更改为

def word_search(doc_list, keyword):
for ele in doc_list:
    print([ele for ele in ele.lower().rstrip('.,').split()])

我明白了

['the', 'learn', 'python', 'challenge', 'casino']
['they', 'bought', 'a', 'car,', 'and', 'a', 'horse']
['casinoville?']

如您所见,尽管我尝试剥离(“。,”),但“,”与“ car”仍然存在。关于为什么会这样的任何想法? 如果尝试"car,".strip(".,"),我会得到预期的'car'

谢谢!


编辑:感谢您的帮助-我不知道它仅在边缘剥离。这是面向未来读者的两种解决方案:

def word_search(doc_list, keyword):
    mylist = []

    for ele in doc_list:
        tmp = [ele.lower().strip(".,") for ele in ele.split()]
        if len([ele for ele in tmp if ele == keyword]) > 0:
            mylist.append(doc_list.index(ele))

#         if len([ele.strip(".,") for ele in ele.lower().split() if ele.strip(".,") == keyword.lower()]) > 0:
#             mylist.append(doc_list.index(ele))
    return mylist

1 个答案:

答案 0 :(得分:1)

您要删除整个句子,而不是每个单词。 data <- data.frame(id= c(1,2,3), year = c(2018,2018,2019), samples = c("species1","species2","species1"), panda = c(1,0,0), tiger = c(0,1,1)) > data id year samples panda tiger 1 2018 species1 1 0 2 2018 species2 0 1 3 2019 species1 0 1 位于句子的中间,因此不会被剥夺。更改为:

car,