找到列表元素的最近值

时间:2017-06-02 12:53:09

标签: 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'])

现在我想找到result下一个元素值。这是:'game''cool'

我该怎么做(使用python 2.7)?

5 个答案:

答案 0 :(得分:7)

鉴于你有交叉词

result = { 'win', 'success' }

您可以在list2中找到下一个单词:

next_words = [list2[list2.index(word)+1] for word in result]

index获取列表中给定元素的索引。您可以为其添加1以获取下一个元素。

如果您的元素位于列表的 end ,则会抛出异常,因为没有" next"得到的元素。

答案 1 :(得分:3)

您可以使用<alias:[\w\+]+> 功能并添加1.但请注意,如果您的公共元素是列表中的最后一个,则会产生错误

index

编辑对于最后一个元素的常见元素:

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

答案 2 :(得分:2)

这是list2中下一个元素的技巧:

next_result = [list2[list2.index(el)+1] for el in result if list2.index(el)+1<len(list2)]

答案 3 :(得分:2)

您可以对list2进行成对迭代,并执行&#34;交叉点&#34;手动:

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']

答案 4 :(得分:1)

您可以使用list2.index,但只是为了找回索引而进行完整搜索,并人为地增加了从O(n)O(n*n)的复杂性。

只需跟踪每个单词的索引。有几种方法可以做到这一点。

  • 创建自己的搜索常用字词的函数,并将其作为list2中这些字词的索引返回。这可能是最不可能但最快的。

  • list2的单词到它们的索引创建一个字典,然后在计算集合交集之后,在dict上查找以找到索引并增加1。您需要构建一个大小与list2相同的完整字典,这可能很昂贵(但仍然优于O(n*n))。

  • list2的单词到下一个单词或None创建一个字典,如果没有,并在字典上查找以查找索引。您需要构建一个大小为list2的完整字典,这可能很昂贵。

  • 如果你知道如何使用itertools,你可以在list2上做一个产生索引和单词的迭代器,如果单词在{{1}中,则过滤结果},然后只选择索引。