我正在尝试编写一小段代码来检测最常出现的字符。但是,我一直无法检测值是否为空格。你知道吗
下面是我的代码:
text = "Hello World!"
## User lower() because case does not matter
setList = list(set(textList.lower()))
for s in setList:
if s.isalpha() and s != " ":
## Do Something
else:
setList.remove(s)
问题是集合列表以以下值结尾:
[' ', 'e', 'd', 'h', 'l', 'o', 'r', 'w']
<>我尝试了多种方法来检测空白区域,没有运气,包括在原始字符串值上使用String()。isspace()将不起作用,因为它至少查找一个字符。你知道吗
问题是,您在迭代列表时正在从列表中删除项。千万不要那样做。考虑一下这个案子
这就是
setList
在转换为集合和列表之后的样子。在第一次迭代中,将看到!
,并且将从setList
中删除它。现在!
被删除,下一个字符变成当前字符,即. For the next iteration, the iterator is incremented and it points to
e
(因为空格是当前字符)。这就是为什么它仍然存在于输出中。你可以用这个程序检查这个输出
但是如果您注释
num_list.remove(i)
,输出将变成为了解决实际问题,可以使用^{} 来查找字符的频率,如下所示
输出
一个简单的方法是首先从文本中删除空格
但这并不是很有效,因为count会为每个字符扫描整个字符串一次(O(n2)
对于较长的字符串,最好使用
Collections.Counter
或Collections.defaultdict
在单个过程中进行计数相关问题 更多 >
编程相关推荐