【问题标题】:For loops stop after one output? [duplicate]for循环在一个输出后停止? [复制]
【发布时间】:2021-07-11 14:25:24
【问题描述】:

编写一个函数,从一个列表中找出一个单词的所有字谜。您将获得两个输入,一个单词和一个包含单词的数组。

您好,可以向我解释一下这 2 个功能有何不同吗?一个只返回 for 循环找到的第一个值......为什么会这样?

def anagrams(word, words):
    for item in words:
        if sorted(item) == sorted(word):
            return [item]

def anagram(word, words):
    return [item for item in words if sorted(item) == sorted(word)]

print(anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']))
print(anagram('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']))

['照顾者']

['照顾者','赛车手']

【问题讨论】:

  • return 导致函数退出。你会使用yield 来做你想做的事情;尽管这是该语言的一项更高级的功能。
  • 如果你想得到相同的结果(多个匹配的词)并保持相似的for-loop,那么你需要添加一个result (list)来保持所有匹配的字谜。

标签: python loops for-loop


【解决方案1】:
def anagram(word, words):
    return [item for item in words if sorted(item) == sorted(word)]
def anagram(word, words):
    final_list = []
    for item in words:
        if sorted(item) == sorted(word):
            final_list.append(item)
    return final_list

两者都会做同样的工作

您的anagrams 函数在找到一个导致函数退出的匹配项后返回

A return statement ends the execution of a function, and returns control to the calling function

你也可以使用生成器函数

def anagram(word, words):
    for item in words:
        if sorted(item) == sorted(word):
            yield item
   
print(anagram('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']))

"""This returns a generator object, so you need to convert it to list"""

print(list(anagram('racer', ['crazer', 'carer', 'racar', 'caers', 'racer'])))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2022-01-11
    相关资源
    最近更新 更多