为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

FFIVE 2022-10-25 15:05:55
我在一个列表(word_list)中有一个单词列表,我创建了另一个列表,它只是一行文章标题(headline_col)。标题是多个单词的字符串,而 word_list 是单个单词。我想搜索标题以查看它们是否包含我的单词列表中的任何单词,如果是,则在标题中附加另一个列表(slam_list)。我已经查过了,我看到的所有东西都只是将一个精确的字符串与另一个相同的字符串匹配。例如,查看条目是否正好是“apple”,而不是查看它是否在“john ate an apple today”中。我尝试过使用集合,但是如果有匹配项,我只能让它返回 True,我不知道如何让它附加 slam_list,甚至只是打印条目。这就是我所拥有的。我将如何使用它来获得我需要的东西?import csvword_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 needwith 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]
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

因此,正如您所提到的,使用集合绝对是这里的方法。这是因为集合中的查找比列表中的查找要快得多。如果您想知道原因,请在 google 上快速搜索散列。进行此更改所需要做的就是将 word_list 中的方括号更改为花括号。


您需要处理的真正问题是“标题是多个单词的字符串,而 word_list 是单个单词”


您需要做的是遍历许多单词。我假设 header_col 是标题列表,其中标题是包含一个或多个单词的字符串。我们将遍历所有标题,然后遍历标题中的每个单词。


word_list = {"Slam", "Slams", "Slammed", "Slamming", "Blast", "Blasts", "Blasting", "Blasted"}


# Iterate over each headline

for 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


查看完整回答
反对 回复 2022-10-25
?
GCT1015

TA贡献1827条经验 获得超4个赞

pandas在这里,由于您正在阅读 csv,因此使用它来实现您的目标可能会更容易。


你想要做的是通过它的索引来识别列,看起来它是 2。然后你找到第三列的值在word_list.


import pandas as pd


df = pd.read_csv("website_headlines.csv")

col = df.columns[2]

df.loc[df[col].isin(word_list), col]

考虑以下示例


import numpy as np

import pandas as pd


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

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


# add some extra characters to see if limited to exact matches

word_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               c

0   1   1           Slams

1   2   2           Slams

2   3   3   Blasted_extra

3   4   4          Blasts

4   5   5     Slams_extra

5   6   6  Slamming_extra

6   7   7            Slam

7   8   8     Slams_extra

8   9   9            Slam

9  10  10        Blasting


查看完整回答
反对 回复 2022-10-25
  • 2 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信