![](/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.