首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用For-Else将执行这两个条件。我该如何解决这个问题?

使用For-Else将执行这两个条件。我该如何解决这个问题?
EN

Stack Overflow用户
提问于 2019-02-03 07:00:29
回答 2查看 51关注 0票数 1

我需要写一段代码,使用循环来找出两个列表中是否有公共元素。因此,我写了以下内容:

代码语言:javascript
复制
l1 = eval(input("Enter a list: "))
l2 = eval(input("Enter another list: "))
for i in range (len(l1)):
        for j in range (len(l2)):
                if l1[i] == l2[j]:
                        print("Overlapped")
                        break
else:
        print("Separated")

然而,我得到的输出是:

代码语言:javascript
复制
Enter a list: [1,34,543,5,23,"apple"]
Enter another list: [54,23,6,213,"banana"]
Overlapped
Separated

因为列表有一个共同的成员,所以它应该只打印“重叠的”,但它也会打印“分离的”。

我该如何解决这个问题?我使用的是python 3.7

非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2019-02-03 07:12:07

创建元组列表(i, j)并使用单个for循环遍历元组列表。因此,要么输出为"Overlapped",循环中断,要么执行else子句,输出为"Separated"

代码语言:javascript
复制
for i, j in [(i, j) for i in range(len(l1)) for j in range(len(l2))]:
    if l1[i] == l2[j]:
        print("Overlapped")
        break
else:
    print("Separated")

输出:

输入一个列表: 1,34,543,5,23,"apple“输入另一个列表: 54,23,6,213,"banana”重叠

输入列表: 1,34,543,5,23,“

”输入另一个列表: 54,234567,6,213,"banana“分隔

或者,您可以使用相等列表元素的索引创建一个元组列表。最后,检查列表是否为空:

代码语言:javascript
复制
equal = [(i, j) for i in range (len(l1)) for j in range(len(l2)) if l1[i] == l2[j]]
if equal:
     print("Overlapped")
else:
     print("Separated")  
票数 1
EN

Stack Overflow用户

发布于 2019-02-03 07:05:43

由于您需要打破这两个循环才能使else按您预期的方式工作,因此我认为在这里完全不使用else会更容易一些。如果你在一个函数中定义你的代码,你可以使用return同时跳出两个循环。

例如:

代码语言:javascript
复制
def have_common_elements():
    l1 = eval(input("Enter a list: "))
    l2 = eval(input("Enter another list: "))
    for i in range (len(l1)):
        for j in range (len(l2)):
            if l1[i] == l2[j]:
                return True
    return False # will only happen if the previous `return` was never reached, similar to `else`

have_common_elements()

示例:

代码语言:javascript
复制
Enter a list: [1,34,543,5,23,"apple"]
Enter another list: [54,23,6,213,"banana"]
True

Enter a list: [1,34,543,5,25,"apple"]
Enter another list: [54,23,6,213,"banana"]
False
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54498338

复制
相关文章

相似问题

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