代码之家  ›  专栏  ›  技术社区  ›  JD2775

在Python中遍历字符串列表

  •  1
  • JD2775  · 技术社区  · 7 年前

    我试图弄清楚为什么顶部代码有效而底部代码无效。它们都是用于循环的,只是编写方式不同,似乎做了相同的事情,但第二个循环因“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
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   Cristian Ciupitu    7 年前

    第二种方法的问题

    这是有道理的,因为这里如果你用 longestWord(['these', 'are', 'some', 'strings']) ,然后在第一次迭代中 s 'these'

    现在如果我们打电话 max(len(s)) 因此,这意味着Python将首先计算 len(s) 那是 len('these') 5 max(..) 5. . 但是 iterable 最多5个 “是奇怪的,因此出现了错误。

    第一 元素。

    def longestWord(words):
        return max(len(s) for s in words)

    您可以构造一个iterable: (len(s) for s in words) for 循环,它是一个生成器,当您对其进行迭代时,将生成 words . 因此 最大值(…) int 最大值(…)

        2
  •  4
  •   Colin Ricardo    7 年前
    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

        3
  •  2
  •   Sanchit Kumar    7 年前

    因为 max() 如果检查max()方法的定义,则可以处理一个或两个数。当你喜欢的时候 max(len(s)) 它不是一个iterable对象,参数也不是两个整数,它只是一个整数值。

    https://www.programiz.com/python-programming/methods/built-in/max

    max(iterable, *iterables[,key, default])
    max(arg1, arg2, *args[, key])
    
    推荐文章