带有大多数"o"字符的单词

Joh*_* P. 3 python string python-2.7 python-3.x

我需要编写一个Python函数,它返回字符串中带有最大数字"o"字符的单词.例如,get_most_ooo_word(['aa ao ooo'])应该返回['ooo']get_most_ooo_word(['aa ao oa aaaooo aooqq aoooq'])应该返回['aaaooo', 'aoooq'].

我试过这个:

def get_most_ooo_word(words):
   k=0
   for i in range(len(words)-1):
      if words[i].count('o')>words[i-1].count('o'):
         k=words[i]
   return(k)
Run Code Online (Sandbox Code Playgroud)

问题是这个列表只包含1个元素 - 整个字符串 - 我不知道如何在这个列表中分隔单词.

upd:实际上,任务中有一个错误:输入应该是一个字符串,而不是一个列表

Kas*_*mvd 13

这是一种使用的优化方式collections.defaultdict():

In [39]: def get_max_with(lst, char):
    ...:     d = defaultdict(list)
    ...:     for w in lst:
    ...:         d[w.count(char)].append(w)
    ...:     return d[max(d)]
    ...: 
Run Code Online (Sandbox Code Playgroud)

演示:

In [40]: lst
Out[40]: ['aa', 'ao', 'oa', 'aaaooo', 'aooqq', 'aoooq']

In [41]: get_max_with(lst, 'o')
Out[41]: ['aaaooo', 'aoooq']
Run Code Online (Sandbox Code Playgroud)

如果所有项目都没有出现预期的字符,您可以max(d)在访问字典中的相应值之前检查其数量,并返回您想要的任何内容.

  • 这是我要走的路线......(或者甚至可能是`dict.setdefault`) - 然而,有一件事(OP没有指明 - 所以很可能不是一个问题)值得考虑的是所有的话都有没有`o`在他们身上...... (2认同)