亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遍歷字符串列表,查找關鍵字并打印

遍歷字符串列表,查找關鍵字并打印

MMTTMM 2023-02-22 19:08:48
取兩個由字符串組成的列表:strings = ['hello everyone!', 'how are you doing?', 'are you doing well?', 'are you okay?', 'good, me too.']searching_for = ['are', 'you', 'doing']我的目標是搜索strings中的每個項目searching_for并打印包含這些關鍵字的完整字符串。即,我希望我的輸出是:Output: ['how are you doing?', 'are you doing well?']請注意,輸出只是 中的第 2 和第 3 項strings,它不包含第 4 項。我不確定為什么這對我來說如此困難,但我認為這歸結為我還不夠了解 Python。我想讓這個足夠通用,這樣我就可以在一個非常大的字符串列表中搜索我給它的關鍵字。到目前為止,這是我的解決方案:def search(*args):    arg_list = []    search_for = numpy.append(arg_list, args)        for i in strings:        for j in search_for:            if all(j in i) is True:                print(i)但這會拋出一個TypeError: 'bool' object is not iterable. 我嘗試了上述代碼的幾個不同的迭代,使用 Python 的內置filter函數和其他一些函數,但我一直被類似的錯誤所困擾。我也不確定這是否會給我一個列表,我認為它會在終端的新行中吐出結果。
查看完整描述

5 回答

?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

在 python 中有一個叫做list comprehension的東西,它比長循環結構更有效且更容易閱讀for。要創建您要查找的列表,這是列表理解的示例:


result = [s for s in strings if all(sf in s for sf in searching_for)]

# ['how are you doing?', 'are you doing well?']

它按照它所說的那樣做,在我看來是直截了當的:


創建一個列表(括號)

s變量中的字符串strings

如果可以找到sf變量的所有字符串searching_fors


查看完整回答
反對 回復 2023-02-22
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

all(or any) 將嘗試遍歷它的輸入;and Trueor False(作為 的結果j in i)不是可迭代的。這是導致TypeError:


all(True)

# TypeError: 'bool' object is not iterable

相反,讓你的內循環更簡單:


def search(*args):

    arg_list = []

    search_for = numpy.append(arg_list, args)

    

    for i in strings:

        if all(j in i for j in search_for):

            print(i)

或者更簡單:


def search(args):

    for i in strings:

        if all(j in i for j in args):

            print(i)

輸出:


search(searching_for)

# how are you doing?

# are you doing well?

請注意,您不需要all(...) is Truesince allwould already have returned either TrueorFalse


查看完整回答
反對 回復 2023-02-22
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

strings = ['hello everyone!', 'how are you doing?', 'are you doing well?', 'are you okay?', 'good, me too.']

keywords = ['are', 'you', 'doing']


for s in strings:

    for word in s.split():

        if word in keywords:

            print(s) 

            break


查看完整回答
反對 回復 2023-02-22
?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

嘗試這個:


for st in strings:

    if set(searching_for).issubset(set(st[:-1].split())):

        print(st)


查看完整回答
反對 回復 2023-02-22
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

你可以試試

print([i for i in strings if all([s in i for s in searching_for])])

輸出

['how are you doing?', 'are you doing well?']

此列表理解將檢查searching_for列表中的所有單詞是否在每個句子中strings,如果是,它將打印該句子。


查看完整回答
反對 回復 2023-02-22
  • 5 回答
  • 0 關注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號