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

时间:2014-06-17 20:05:03

标签: python string sorting python-2.7

我有一个单词(字符串)列表,比如说:

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]

有谁知道一个简单的方法吗?

2 个答案:

答案 0 :(得分:2)

这可能是一种更快的方法,但至少可以这样做:

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

答案 1 :(得分:1)

中间步骤似乎不需要我。为什么不将单词列表单个字符串并在其中找到子字符串?

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