![](/img/trans.png)
[英]Find all instances of a sub-string in a list of strings and return the index of the string where the sub-string is found
[英]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.