遍历 Python 中的字符串列表

我想弄清楚为什么顶部代码有效而底部代码无效。它们都是 for 循环,只是写法不同,它们似乎做同样的事情,但第二个循环失败,并显示“int object is not iterable”。也许我在这里遗漏了一些明显的东西


这有效

def longestWord(words):

    return max(len(s) for s in words)



x = longestWord(['these', 'are', 'some', 'strings'])


print(x)

这不起作用

def longestWord(words):

    for s in words:

        return max(len(s))


x = longestWord(['these', 'are', 'some', 'strings'])


print(x)


TypeError: 'int' object is not iterable


偶然的你
浏览 230回答 3
3回答

牧羊人nacy

第二种方法的问题这是有道理的,因为在这里,如果您使用例如 调用它longestWord(['these', 'are', 'some', 'strings']),那么在第一次迭代s中将是'these'。现在,如果我们所说的max(len(s)),如此,这意味着Python会首先评估len(s)是len('these'),因此5,然后我们叫max(..)上5。但是,5是不是一个迭代(列表,发电机,或任何价值的“集合”)。计算“最大值 5 ”很奇怪,因此会出现错误。即使 Python 允许对于不可迭代的元素只返回该元素,它仍然无法工作,因为这意味着它将返回第一个元素的长度。为什么第一种方法有效在第一个实现中:def longestWord(words):     return max(len(s) for s in words)您构造了一个可迭代对象:(len(s) for s in words)不是for循环,而是一个生成器,当您对其进行迭代时,将生成words. 因此max(..),第一个(也是唯一的)参数是一个可迭代的integers。这意味着该max(..)函数将迭代这个可迭代对象,并跟踪最大值。当生成器“耗尽”时,它返回它看到的最大对象。

浮云间

def longestWord(words):     for s in words:             return max(len(s))首先,一旦您获得单词列表中的第一个单词,您就会返回。其次,len()给你一个整数,表示你调用它的时间。所以,这样做max(len(whatever))你会得到单个数字的最大值,这就是为什么你会得到你所做的错误。这在您的第一个示例中起作用的原因:max(len(s) for s in words)是因为len(s) for s in words它给了你一个可迭代的,你可以从中获得最大元素。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python