我有几个单词列表,其中一些列表共享相同的单词。我试图找出每个列表中,哪个其他列表具有相同顺序的共同单词。例如,假设这些是我的列表(为简单起见,使用字母而不是单词/字符串):
list1 = [a,b,c,d]
list2 = [f,n,a,b,g]
list3 = [x,f,g,z]
list4 = [y,a,b,f,g,k]
在这里,我们可以看到列表1中的[a,b]以相同的顺序出现在列表2和列表4中。我们还可以看到列表3中的[f,g]在列表4中出现。因此,我们将按照以下方式将这些列表映射到彼此:
list1: list2, list4 #(contains [a,b])
list2: list1, list4 #(contains [a,b])
list3: list4 #(contains [f,g])
list4: list1, list2, list3 #(contains [a,b] and [f,g])
您可以忽略注释,因为它只是用于解释,实际上只有将列表名称相互映射。请注意,即使list2具有元素“f”和“g”,由于它们不按[f,g]的顺序排列,因此它不能映射到list3或list4。
我编写了一个使用set.intersection()函数来获取所有列表中共同单词的函数,但它不关心顺序。因此,我似乎无法弄清要使用哪种数据结构或算法才能以那种方式将列表映射到彼此。
我正在尝试以下内容,其中wordlists是我的列表列表,每个列表都包含其各自的单词数量:
filelist = {}
for i in range(0, len(wordlists)):
current_wordlist = wordlists[i]
for j, j_word in enumerate(current_wordlist):
if current_wordlist[j] == j_word:
if j_word not in filelist:
filelist[i] = {j}
else:
filelist[i].append(j)
但由于它没有映射到正确的列表编号,因此它无法正确映射。我会感激您的反馈或其他检查方法的技巧。
我该如何实现这一点?