我有一个单词(字符串)列表,比如说:
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]
有谁知道一个简单的方法吗?
答案 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))