问题的提出和解决方案概述
这篇文章将告诉你如何找到Python字符串中最常见的元素。
为了使它更有趣,我们有以下运行场景。
Sven,一个摄影师,变成了Python程序员,被要求参加Edge IT的面试。Sven认为面试进行得很顺利,直到他被告知要解决以下问题!
问题:我们如何编写代码来寻找一个字符串中最常见的元素*?*
这可以通过使用以下选项之一来完成。
- 方法1 :使用
collections.Counter - 方法2 :使用
for循环和max() - 方法3:使用
for循环和count() - 方法4:使用
max(),列表理解和一个lambda - 奖金:确定最常见的元素,忽略空格
方法1:使用Collections.Counter
这个例子使用了 collections库,该库提供了容器类型,允许编码者轻松存储和访问数据值。该 Counter()函数对每个元素的计数进行记录。
import collections
slogan = 'It is not a bug it is an undocumented feature.'
print(collections.Counter(slogan).most_common(1))
上面的代码导入了Python的内置 collections库,并将一个字符串保存到变量slogan 。
然后,调用 collections.Counter()被调用,并将变量slogan 作为参数传递给它。`.`
下一步。 most_common(一个用于快速统计的计数器工具)被附加到一个参数1上。 `slogan` 并传递一个参数1。这表示返回最高值。
一个包含具有最高理数的字符和相关数字的Tuples 列表返回并输出到终端。
在这个例子中,空格字符是最高的,出现了9次。
[(' ', 9)] |
要将Tuple从List中分离出来,可以在末尾添加[0] 。
print(collections.Counter(slogan).most_common(1)[0])
这将导致下面的输出。
(' ', 9) |
方法2:使用For循环和max()
这个例子使用了一个 for循环并调用 [`max()`](https://blog.finxter.com/python-max/)函数来确定哪个字符在一个字符串中出现的频率最高。
slogan = 'We Debug Every Software Bug'
common = {}
for i in slogan.lower():
if i in common:
common[i] += 1
else:
common[i] = 1
most_common = max(common, key=common.get)
print (f'The maximum character is: {most_common}')
上面的代码创建了一个字符串并将其保存到变量slogan 。然后,创建一个空的字典 并保存到变量common 。
接下来,一个 for循环被实例化,以小写的方式遍历slogan 中的每个元素(字符)(使用 [lower()](https://blog.finxter.com/python-string-lower/)).
如果该元素(字符)以前被找到过,计数增加1。如果这是第一次找到该元素(字符),初始值被设置为1。
然后,调用 max()函数被调用并传递给common ,检索出具有最高计数的键。结果保存到most_common 。
如果将common 输出到终端,将显示如下 Dictionary会显示出来。
{'w': 2, 'e': 5, ' ': 4, 'd': 1, 'b': 2, 'u': 2, 'g': 2, 'v': 1, 'r': 2, 'y': 1, 's': 1, 'o': 1, 'f': 1, 't': 1, 'a': 1} |
如果most_common 被输出到终端,将显示以下字符。
The maximum character is: e |
这是正确的!字符e ,可以在字符串slogan中找到5 次。
注意:如果我们在运行这段代码之前没有将slogan 转换为小写字母,结果会有所不同,因为E和e不等同于相同的值。
方法3:使用For循环和count()
这个例子使用了一个 for循环并调用 count()函数来确定哪个字符在一个字符串中出现的频率最高。
slogan = 'Every bug needs help.'.lower()
rcount = 1
for c in slogan:
char_count = slogan.count(c)
if char_count > rcount:
rcount = char_count
most_common = c
print(most_common, rcount)
上面的代码创建了一个字符串,用以下方法将其转换为小写字母 lower()将其转换为小写字母,并将其保存在变量slogan 。然后,创建一个计数器变量,rcount ,并赋值为1。
接下来,一个 for循环被实例化,以遍历slogan 中的每个元素(字符),检查当前的元素(字符),看它到目前为止在遍历中出现了多少次。相关的变量也相应地被更新。
迭代完成后,most_common 字符和其相关的计数会输出到终端。
e 5 |
方法4:使用max()和一个lambda
这个例子使用 max()和a lambda来确定哪个字符在一个字符串中出现的频率最高。
def most_common(text):
common = [(c, text.count(c)) for c in set(text)]
return max(common, key=lambda x: x[1])[0]
slogan = 'Software Mechanics'
print(most_common(slogan))
上面的代码定义了一个函数most_common 。这个函数接受1个参数,一个字符串(text)。
让我们从底部开始,一个字符串被声明并保存到slogan 。然后,上述函数被调用并传递这个字符串 (most_common(slogan))。
在顶部的函数中。 List Comprehension被用来遍历所传递的字符串的每个元素(字符),使用的是 set() 方法遍历传递的字符串中的每个元素(字符)。结果保存到common 。
如果将common 输出到终端,将显示如下。
[('c', 2), ('w', 1), (' ', 1), ('n', 1), ('s', 2), ('a', 2), ('m', 1), ('r', 1), ('h', 1), ('e', 2), ('i', 1), ('t', 1), ('f', 1), ('o', 1)] |
以下是将most_common 的内容输出到终端。
c |
奖励:确定忽略空格的最常见元素
上面所有的例子都向你展示了确定一个字符串中最常见元素的各种方法。但是,如果你不想计算空格字符出现的次数,怎么办?
slogan = 'Amazing Software Mechanics Always Fixing Bugs'.lower()
common = {}
for c in slogan:
if c == ' ':
continue
elif c in common:
common[c] += 1
else:
common[c] = 1
most_common = sorted(common.items(), key=lambda k: k[1], reverse=True)
print(most_common[0])!
摘要
这篇文章向你展示了(5)种寻找字符串中最常见元素的方法。这些例子应该为你提供足够的信息来选择最符合你的编码要求的方法。
祝您好运,编码愉快!