【问题标题】:Python nested loops, a little understanding needed [duplicate]Python嵌套循环,需要一点了解[重复]
【发布时间】:2021-09-05 11:05:55
【问题描述】:

请看下面的代码

def common_letters(string_one,string_two):
    letters_in_common = []
    for letter in string_one:
        for letter2 in string_two:
            if letter == letter2:
                letters_in_common.append(letter)
                return letters_in_common

returned = common_letters("hello", "loha")
print(returned)

上述代码有效,但仅在外循环的第一次迭代中有效,因此我的 letters_in_common 列表仅在应该返回 ['h','l','l'] 时返回 ['h'],在 JS 中语法不同,循环以递增方式工作。

我是否误解了循环在 Python 中的工作方式,还是我没有包含语法级别的步骤?

附言我知道我可以使用“in”关键字等,但我想先用循环尝试一下。

【问题讨论】:

  • 在 JS 中,花括号完成缩进的工作。如果您的 if 语句没有 { ... } 大括号,则只有 one 语句是块的一部分。 JS 代码中的任何缩进不计入 Python 中的缩进方式
  • 换句话说:return 可能不是循环的一部分
  • 谢谢@MartijnPieters 习惯了缩进线!

标签: python for-loop syntax


【解决方案1】:

您的return 是缩进的,因此它位于if 内部。大概你想在检查每个字母和每个字母后返回,这意味着 return 必须在循环之外:

def common_letters(string_one, string_two):
    letters_in_common = []
    for letter in string_one:
        for letter2 in string_two:
            if letter == letter2:
                letters_in_common.append(letter)
    return letters_in_common

旁注:如果两个字符串中有多个共享字母,这将产生一个有点令人惊讶的结果。如果我只想找出共享的字母,我会使用 set intersection:

def common_letters(string_one, string_two):
    return list(set(string_one) & set(string_two))

【讨论】:

  • 谢谢,有道理,现在工作正常。可能需要我一点时间来适应缩进线!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2016-01-06
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多