簡體   English   中英

確定字符串列表中子字符串的位置

[英]Determining the position of sub-string in list of strings

我有一個單詞(字符串)列表,說:

word_lst = ['This','is','a','great','programming','language']

第二個包含子字符串的列表說:

subs_lst= ['This is', 'language', 'a great']

我們假設subs_lst中的每個子字符串在word_lst中只出現一次。 (子串可以是任何長度)

我想要一種簡單的方法來找到word_lst中子字符串的層次結構位置。 所以我想要的是根據它們在word_lst中的外觀來命令subs_lst。 在前面的示例中,輸出將是:

out = ['This is', 'a great', language]

有誰知道一個簡單的方法來做到這一點?

這可能是一種更快的方法,但至少可以這樣做:

word_lst = ['This','is','a','great','programming','language']
subs_lst= ['This is', 'language', 'a great']
substr_lst = [' '.join(word_lst[i:j]) for i in range(len(word_lst)) for j in range(i+1, len(word_lst)+1)]
sorted_subs_list = sorted(subs_lst, key=lambda x:substr_lst.index(x))
print sorted_subs_list

輸出:

['This is', 'a great', 'language']

我們的想法是建立一個word_lst中每個子字符串的列表,排序,以便所有以“This”開頭的條目首先出現,然后是以“is”開頭的所有條目,等等。我們將它存儲在substr_lst

>>> print substr_lst
['This', 'This is', 'This is a', 'This is a great', 'This is a great programming', 'This is a great programming language', 'is', 'is a', 'is a great', 'is a great programming', 'is a great programming language', 'a', 'a great', 'a great programming', 'a great programming language', 'great', 'great programming', 'great programming language', 'programming', 'programming language', 'language']

一旦我們有一個名單,我們的排序subs_list,使用每個條目的索引substr_list為重點,以排序:

>>> substr_lst.index("This is")
1
>>> substr_lst.index("language")
20
>>> substr_lst.index("a great")
12

中間步驟似乎不需要我。 為什么不將單詞列表單個字符串並找到其中的子字符串?

 sorted(subs_lst, key = lambda x : ' '.join(word_lst).index(x))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM