python列表作为函数param

2024-05-03 15:45:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,我试图得到一个名为fizz\u count的函数,该函数将一个列表x作为输入,并返回该列表中字符串“fizz”的计数。但代码总是返回1。你知道吗

迄今为止的代码:

def fizz_count(x): 
    count = 0 
    for item in x:
        if str(item).lower() == "fizz": 
            count += 1 

    return count

因此,当调用fizz_count(["fizz","buzz","fizz"])时,代码应该返回2。你知道吗


Tags: 函数字符串代码in列表forifdef
2条回答

有一个漂亮的内置python函数,名为count,它实际上正是您想要的:

def fizz_count(x): 
    return x.count('fizz')

如果对python有疑问,请咨询the docs

JaredPar提出了一个有效的观点,如果您希望这是不区分大小写的,那么您必须在这里使用列表理解。修改的代码(添加了实用程序):

def fizz_count(x, search_string, case_insensitive=False):
    if case_insensitive:
        x = [item.lower() for item in x]
    return x.count(search_string)

它对我来说很好用。你知道吗

正如@Slater Tyranus所写,当然要使用list.count->;fizzes.count('fizz')。如果您想做一些更复杂的计数(比如case insistive),列表理解可能会对您有所帮助。你知道吗

>>> fizzes = ["fizz","buzz","fizz"]
>>> len([f for f in fizzes if lower(f) == 'fizz'])
2

或者(感谢@iCodez):

>>> sum(1 for f in fizzes if lower(f) == 'fizz')

对于性能迷(Python2.7

>>> from timeit import timeit                                              
>>> fizzes = [u"fizz", u"buzz"] * 10000                                    
>>> def fizz_for():                                                        
...     count = 0                                                          
...     for item in fizzes:                                                
...         if item == u"fizz":                                            
...             count += 1                                                 
...     return count
... 
>>> timeit('__main__.fizz_for()', setup='import __main__', number=1000)    
1.393934965133667
>>> fizz_len = lambda: len([f for f in fizzes if f == u'fizz'])            
>>> timeit('__main__.fizz_len()', setup='import __main__', number=1000)    
1.3358290195465088
>>> fizz_sum = lambda: sum(1 for f in fizzes if f == u'fizz')              
>>> timeit('__main__.fizz_sum()', setup='import __main__', number=1000)    
1.7232561111450195
>>> fizz_count = lambda: fizzes.count(u'fizz')                             
>>> timeit('__main__.fizz_count()', setup='import __main__', number=1000)  
0.44240689277648926

Python3.3(看起来完全相反):

>>> timeit('__main__.fizz_for()', setup='import __main__', number=1000)   
1.5867065230013395
>>> fizz_len = lambda: len([f for f in fizzes if f == 'fizz'])      
>>> timeit('__main__.fizz_len()', setup='import __main__', number=1000)  
1.2898265199983143
>>> fizz_sum = lambda: sum(1 for f in fizzes if f == 'fizz')          
>>> timeit('__main__.fizz_sum()', setup='import __main__', number=1000)
1.5955777620001754
>>> fizz_count = lambda: fizzes.count('fizz')             
>>> timeit('__main__.fizz_count()', setup='import __main__', number=1000)   
0.3196232570007851

结论

  • 如果可能,使用list.count。你知道吗
  • 非常有趣的是,python2.7中for循环的on比sum快。你知道吗
  • 使用unicode会使速度降低约30%(不是在结果中,而是在本地检查)。你知道吗

相关问题 更多 >