搜索列表以查看它是否包含存储在 python 中不同列表中的字符串

我在一个列表(word_list)中有一个单词列表,我创建了另一个列表,它只是一行文章标题(headline_col)。标题是多个单词的字符串,而 word_list 是单个单词。我想搜索标题以查看它们是否包含我的单词列表中的任何单词,如果是,则在标题中附加另一个列表(slam_list)。


我已经查过了,我看到的所有东西都只是将一个精确的字符串与另一个相同的字符串匹配。例如,查看条目是否正好是“apple”,而不是查看它是否在“john ate an apple today”中。


我尝试过使用集合,但是如果有匹配项,我只能让它返回 True,我不知道如何让它附加 slam_list,甚至只是打印条目。这就是我所拥有的。我将如何使用它来获得我需要的东西?


import csv


word_list = ["Slam", "Slams", "Slammed", "Slamming",

             "Blast", "Blasts", "Blasting", "Blasted"]


slam_list = []

csv_data = []


# Creating the list I need by opening a csv and getting the column I need

with open("website_headlines.csv", encoding="utf8") as csvfile:

    reader = csv.reader(csvfile)

    for row in reader:

        data.append(row)


headline_col = [headline[2] for headline in csv_data]


FFIVE
浏览 106回答 2
2回答

守候你守候我

因此,正如您所提到的,使用集合绝对是这里的方法。这是因为集合中的查找比列表中的查找要快得多。如果您想知道原因,请在 google 上快速搜索散列。进行此更改所需要做的就是将 word_list 中的方括号更改为花括号。您需要处理的真正问题是“标题是多个单词的字符串,而 word_list 是单个单词”您需要做的是遍历许多单词。我假设 header_col 是标题列表,其中标题是包含一个或多个单词的字符串。我们将遍历所有标题,然后遍历标题中的每个单词。word_list = {"Slam", "Slams", "Slammed", "Slamming", "Blast", "Blasts", "Blasting", "Blasted"}# Iterate over each headlinefor headline in headline_col:    # Iterate over each word in headline    # Headline.split will break the headline into a list of words (breaks on whitespace)    for word in headline.split():        # if we've found our word        if word in word_list:            # add the word to our list            slam_list.append(headline)            # we're done with this headline, so break from the inner for loop            break

GCT1015

pandas在这里,由于您正在阅读 csv,因此使用它来实现您的目标可能会更容易。你想要做的是通过它的索引来识别列,看起来它是 2。然后你找到第三列的值在word_list.import pandas as pddf = pd.read_csv("website_headlines.csv")col = df.columns[2]df.loc[df[col].isin(word_list), col]考虑以下示例import numpy as npimport pandas as pdword_list = ["Slam", "Slams", "Slammed", "Slamming",             "Blast", "Blasts", "Blasting", "Blasted"]# add some extra characters to see if limited to exact matchesword_list_mutated = np.random.choice(word_list + [item + '_extra' for item in word_list], 10)data = {'a': range(1, 11), 'b': range(1, 11), 'c': word_list_mutated}df = pd.DataFrame(data)col = df.columns[2]>>>df.loc[df[col].isin(word_list), col]    a   b               c0   1   1           Slams1   2   2           Slams2   3   3   Blasted_extra3   4   4          Blasts4   5   5     Slams_extra5   6   6  Slamming_extra6   7   7            Slam7   8   8     Slams_extra8   9   9            Slam9  10  10        Blasting
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python