【问题标题】:comparing two lists, python比较两个列表,python
【发布时间】:2010-10-24 20:15:05
【问题描述】:

我应该定义一个函数overlap(),它接受两个列表,如果它们至少有一个共同成员,则返回True,否则返回False。为了练习,我应该使用两个嵌套的 for 循环来编写它。我做错了什么?

def overlapping(a,b):
    for char in a:
        for char2 in b:
            return char in char2

任何建议如何使它工作?

【问题讨论】:

  • 请参阅that 答案以获取想法。您和 Manuel 可能有相同的课程和/或老师。

标签: python nested for-loop


【解决方案1】:

如果你真的需要使用 2 个循环:

def overlapping(a,b):
    for char1 in a:
        for char2 in b:
            if char1 == char2: return True
    return False

但是使用集合的解决方案要好得多。

【讨论】:

  • 这个很好用!谢谢。 set() 也很好,但由于需要嵌套的 for 循环,我不能使用 set()
【解决方案2】:

您应该使用== 而不是in 运算符

def overlapping(list_a,list_b):
    for char_in_list_a in list_a:
        for char_in_list_b in list_b:
            if char_in_list_a == char_in_list_b:
                return True
    return False

如果你想要使用 set 的东西:

def overlapping(a,b):
         return bool(set(a) & set(b))

【讨论】:

  • 如果是我的代码,我会选择那个,但遗憾的是,赋值需要嵌套循环。
  • 只有在 a[0] == b[0] 和其他情况下返回 False 时才会返回 True。
  • 第一个代码完全错误,第二个基本上是一个家庭作业任务的完整解决方案。而且也是错误的,因为 Gusto 被要求提供具有两个嵌套 for 循环的解决方案。
  • @raceCh 对我来说,家庭作业任务无关紧要。我只是回答问题。如需进一步阅读,请查看:meta.stackexchange.com/questions/10811/…
  • @systempuntoout 并没有改变两者都是错误的事实:第一个在不适当的地方包含不需要的 else,第二个不是真正回答问题。
【解决方案3】:

return 在执行时立即结束函数。由于这是一项家庭作业,您应该自己想出可行的解决方案。您可以考虑使用集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多