繁体   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