我有两个列表:
>>> 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)?
答案 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}中,则过滤结果},然后只选择索引。