【问题标题】:can't loop more than once - for loop (python)不能循环多次 - for 循环(python)
【发布时间】:2021-12-29 14:54:34
【问题描述】:

这里的任务是:

A.比赛结束 给定一个字符串列表,返回字符串的个数 字符串长度为 2 或更多且第一个 和字符串的最后一个字符相同。 注意:python 没有 ++ 运算符,但 += 有效。

def match_ends(words):
    for i in words:
        if (len(i) >= 2) & (i[0] == i[-1]):
            return [i]


print(match_ends(['aba', 'xyz', 'aa', 'x', 'bbb']))

输出是:

['aba']

【问题讨论】:

  • 问题是什么?
  • Return 在第一次命中时退出函数和for循环。用 yield 替换 return ,你就会有一个生成器来做你想做的事情。
  • 您应该使用word 而不是i
  • 你的意思是and,而不是&。你应该计算匹配并返回计数,而不仅仅是返回[i]

标签: python python-3.x loops for-loop iteration


【解决方案1】:

问题是返回第一个并且它不会继续

return 关键字停止函数,所以你必须将它存储在一个类似数组的数组中才能返回它

这里是优化的代码:

def match_ends(*words):
    result = []
    for i in list(words):
        if len(i) >= 2 and i[0] == i[-1]:
            result.append([i])
    return result


print(match_ends('aba', 'xyz', 'aa', 'x', 'bbb'))

【讨论】:

    【解决方案2】:
    if (len(i) >= 2) & (i[0] == i[-1]):
         return [i]
    

    当你的 if 条件为真时你返回,这将停止你的函数。

    如果您想将所有出现的数据都保存为res.append(i),则应将数据保存在变量中(将 i 保存在列表 res 中)

    当您遍历所有列表后,将其返回到外部。

    def match_ends(words):
        for i in words:
            if (len(i) >= 2) & (i[0] == i[-1]):
                res.append(i)
        return res
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    发生这种情况是因为您的第一项与您的 if 条件匹配,并且当您使用 return 时,您的代码以结果作为第一项退出。我不确定你想用这个函数做什么。

    【讨论】:

      猜你喜欢
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      • 2016-01-09
      • 2023-01-16
      相关资源
      最近更新 更多