首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较两个列表并使用循环打印下一个元素

比较两个列表并使用循环打印下一个元素
EN

Stack Overflow用户
提问于 2016-09-25 03:03:19
回答 3查看 86关注 0票数 0

我有两个列表:

代码语言:javascript
复制
list1=['lo0','lo1','te123','te234']
list2=['lo0','first','lo1','second','lo2','third','te123','fourth']

我想要写一段python代码来打印list2的下一个元素,其中list1的项出现在list2中,否则写成"no-match",即,我希望输出为:

代码语言:javascript
复制
first
second
no-match
fourth

我想出了以下代码:

代码语言:javascript
复制
for i1 in range(len(list2)):
        for i2 in range(len(list1)):
            if list1[i2]==rlist2[i1]:
                 desc.write(list2[i1+1])
                 desc.write('\n')

但它给出的输出为:

代码语言:javascript
复制
first
second
fourth

而且我不知道如何在list2中不存在元素的情况下导致“不匹配”。请指点一下!提前谢谢。

EN

回答 3

Stack Overflow用户

发布于 2016-09-25 03:25:06

代码语言:javascript
复制
list1=['lo0','lo1','te123','te234']
list2=['lo0','first','l01','second','lo2','third','te123','fourth']

for i in list1:
    if i not in list2:
        print('no-match')
    else:
        print(list2[list2.index(i)+1])

或者,您可以包含一个try,但如果该项是list2中的最后一个值,则可以包含一个例程。

代码语言:javascript
复制
list1=['lo0','lo1','te123','te234','fourth']
list2=['lo0','first','l01','second','lo2','third','te123','fourth']

for i in list1:
    if i not in list2:
        print('no-match')
    else:
        try:            
            print(list2[list2.index(i)+1])
        except IndexError:
            print(str(i)+" is last item in the list2")
票数 0
EN

Stack Overflow用户

发布于 2016-09-25 03:46:46

您可以使用带有集合的enumerate来测试成员资格,如果找到集合中的元素,则使用当前元素索引+1打印list2中的下一个元素:

代码语言:javascript
复制
list1=['lo0','lo1','te123','te234',"tel23"]
list2=['lo0','first','l01','second','lo2','third','te123','fourth']
st = set(list1)

# set start to one to always be one index ahead
for ind, ele in enumerate(list2, start=1):
    # if we get a match and it is not the last element from list2
    # print the following element.
    if ele in st and ind < len(list2):
        print(list2[ind])
    else:
        print("No match")

正确答案也是:

代码语言:javascript
复制
first
No match
second
No match
No match
No match
fourth
No match

'l01'不等于'lo1',你也不能像重复单词一样使用索引,你总是会得到第一个匹配。

要将您自己的逻辑与double for循环相匹配,并进行O(n^*2)比较:

代码语言:javascript
复制
for ind, ele in enumerate(list2, start=1):
    for ele2 in list1:
        if ele == ele2 and ind < len(list2):
            print(list2[ind])
        else:
            print("No match")
票数 0
EN

Stack Overflow用户

发布于 2016-09-25 18:31:44

代码语言:javascript
复制
list1=['lo0','lo1','te123','te234']
list2=['lo0','first','lo1','second','lo2','third','te123','fourth']
res=[]
for elm in list1:
    if elm in list2:
        print list2[list2.index(elm)+1]
    else : 
        print 'No match'

输出:

代码语言:javascript
复制
first
second
fourth
No match
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39679940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档