Python 查找列表元素的最近值
我有两份清单:Python 查找列表元素的最近值,python,list,element,intersection,Python,List,Element,Intersection,我有两份清单: >>> list1 = ['gain','archive','win','success'] >>> list2 = ['i','win','game','i','am','success','cool'] 通过比较两个列表,我发现两个列表的值相同 >>> result= set(list1) & set(list2) 输出为 set(['win', 'success']) 现在我想找到结果的下一个元素值。这里应
>>> list1 = ['gain','archive','win','success']
>>> list2 = ['i','win','game','i','am','success','cool']
通过比较两个列表,我发现两个列表的值相同
>>> result= set(list1) & set(list2)
输出为
set(['win', 'success'])
现在我想找到结果的下一个元素值。这里应该是:“游戏”
和“酷”
(使用Python2.7)我如何做到这一点呢?因为您有交叉词
result = { 'win', 'success' }
您可以在list2
中找到如下单词:
next_words = [list2[list2.index(word)+1] for word in result]
获取列表中给定元素的索引。可以向其中添加1以获取下一个元素
如果您的元素位于列表的末尾,它将抛出异常,因为没有要获取的“下一个”元素。您可以使用index
函数并添加1。但是要小心,如果您的公共元素是列表中的最后一个元素,那么它将生成一个错误
list1 = ['gain','archive','win','success']
list2 = ['i','win','game','i','am','success','cool']
result= set(list1) & set(list2)
list3 = [list2[list2.index(e)+1] for e in result]
编辑对于最后一个元素是公共元素的情况:
result= set(list1) & set(list2)
list4 = []
for e in result:
try:
list4.append(list2[list2.index(e)+1])
except:
pass
输出:['game','cool']
您可以使用list2.index
,但这只是为了找到索引而进行的完全搜索,并且人为地将复杂性从O(n)
增加到O(n*n)
只需记录每个单词的索引即可。有几种方法可以做到这一点
- 创建您自己的搜索常用词的函数,并将它们作为
list2
中这些词的索引返回。这可能是最不刺激但最快的
- 从
list2
的单词到它们的索引创建一个字典,然后在计算集合交集后,在dict上查找索引并增加1。您需要构建一个清单2大小的完整字典,这可能会很昂贵(但仍然比O(n*n)
好)
- 从
list2
中的单词到下一个单词或None
中的单词(如果没有)创建一个字典,并在dict上查找索引。您需要构建一个清单2大小的完整字典,这可能会很昂贵
- 如果您知道如何使用
itertools
,则可以在list2
上执行迭代器,生成索引和单词,如果单词位于list1
中,则过滤结果,然后仅选取索引
这为列表2中的下一个元素提供了技巧:
next_result = [list2[list2.index(el)+1] for el in result if list2.index(el)+1<len(list2)]
next_result=[list2[list2.index(el)+1]如果list2.index(el)+1您可以在list2
上进行成对迭代,并手动进行“交叉”:
list1 = ['gain','archive','win','success']
list2 = ['i','win','game','i','am','success','cool']
set1 = set(list1)
result = []
for item, nextitem in zip(list2, list2[1:]): # pairwise iteration
if item in set1:
result.append(nextitem) # append the next item if the current item is in the intersection
print(result) # ['game', 'cool']
很好,当没有“下一个”元素时,如何避免抛出异常。这取决于在这种情况下希望发生什么。您没有指定。