0

我试图在列表中找到一个单词等于设定长度的次数?因此,例如:'my name is ryan' and 2 该函数将返回 2 作为单词长度为 2 的次数。我有:

def LEN(a,b):
'str,int==>int'
'returns the number of words that have a len of b'
c=a.split()
res=0
for i in c:
    if len(i)==b:
        res=res+1
        return(res)

但是这一切给我的都是 1 的 res 并且不会超过第一个 i 的 len 为 c。

4

3 回答 3

4

return res在 for 循环中,一旦遇到该语句,程序将立即停止执行。您可以将它移到循环之外,或者使用这种可能更 Pythonic 的方法:

>>> text = 'my name is ryan'
>>> sum(1 for i in text.split() if len(i) == 2)
2

或者更短但不太清楚推荐):

>>> sum(len(i) == 2 for i in text.split())
2

第二个功能是基于这样一个事实:True == 1

于 2013-04-21T03:12:13.917 回答
3

你的功能工作正常,你只是return早起:

def LEN(a,b):
        'str,int==>int'
        'returns the number of words that have a len of b'
        c= a.split()
        res = 0
        for i in c:
            if len(i)==b:
                res= res + 1
        return(res) # return at the end

这相当于:

>>> text = 'my name is ryan'
>>> sum(len(w) == 2 for w in text.split())
2
于 2013-04-21T03:11:54.900 回答
2

怎么样:

>>> s = 'my name is ryan'
>>> map(len, s.split()).count(2)
2
于 2013-04-21T03:13:31.053 回答