素数元素的统计
1.问题描述
小R给定了一个整数数组,要求你统计出其中有多少个元素既是素数,且这些素数元素的出现次数也是素数。需要注意的是,数组中元素的出现次数也应计算在内。比如,数组 [1, 2, 3, 2, 5, 7, 7, 7, 5]
中,元素 2
出现了两次,而 7
出现了三次,这些次数也都需要判断是否为素数。
2.解题思路
2.1问题分析
- 输入:一个整数数组
a
。 - 输出:一个整数,表示既是素数且出现次数也是素数的元素个数。
2.2基本思路
- 统计元素出现次数:使用
collections.Counter
来统计数组中每个元素的出现次数。 - 判断素数:编写一个辅助函数
is_prime
来判断一个数是否为素数。 - 筛选符合条件的元素:遍历统计结果,判断每个元素及其出现次数是否都为素数。
- 统计符合条件的元素个数:最后统计符合条件的元素个数。
2.3 数据结构与算法
- 数据结构:使用
collections.Counter
来统计元素出现次数。 - 算法:遍历统计结果,判断每个元素及其出现次数是否都为素数,并统计符合条件的元素个数。
2.4代码
from collections import Counter
def is_prime(n: int) -> bool:
# 判断一个数是否为素数的辅助函数
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
def solution(a: list) -> int:
# 统计数组中每个元素的出现次数
count = Counter(a)
# 初始化符合条件的元素个数
result = 0
# 遍历统计结果
for num, freq in count.items():
# 判断元素是否为素数
if is_prime(num):
# 判断元素的出现次数是否为素数
if is_prime(freq):
# 符合条件的元素个数加一
result += 1
return result
if __name__ == '__main__':
print(solution([1, 2, 3, 2, 5, 7, 7, 7, 5]) == 3)
print(solution([1, 4, 6, 8, 10, 12]) == 0)
print(solution([3, 3, 3, 5, 5, 5, 5]) == 1)
3.代码详解
3.1 is_prime
函数
-
功能:判断一个数是否为素数。
-
实现:
- 如果
n
小于等于 1,直接返回False
。 - 遍历从 2 到
n
的平方根,如果n
能被其中任何一个数整除,则返回False
。 - 否则返回
True
。
- 如果
3.2 solution
函数
-
功能:统计既是素数且出现次数也是素数的元素个数。
-
实现:
- 使用
Counter(a)
统计数组中每个元素的出现次数。 - 初始化
result
为 0。 - 遍历统计结果,判断每个元素及其出现次数是否都为素数。
- 如果都为素数,则
result
加一。 - 最后返回
result
。
- 使用
单词出现频率
1.问题描述
小U在学习英文时,需要统计英文句子中每个单词的出现次数,并按照字母顺序将统计结果进行排序。请你帮助小U编写一个程序,统计输入的英文句子中每个单词的出现次数,并将结果按字母顺序排序后输出。
2.解题思路
2.1问题分析
- 输入:一个包含多个单词的英文句子。
- 输出:一个列表,列表中的每个元素是一个字符串,格式为
"单词:出现次数"
,并且这些元素按照单词的字母顺序排序。
2.2基本思路
- 分割单词:将输入的句子按照空格分割成单词列表。
- 统计词频:使用
collections.Counter
来统计每个单词的出现次数。 - 排序:按照单词的字母顺序对单词进行排序。
- 格式化输出:将每个单词及其出现次数格式化为字符串,并放入列表中
2.4代码
from collections import Counter
def solution(s: str) -> list:
# 分割单词
words = s.split()
# 统计词频
word_count = Counter(words)
# 按照字母顺序排序
sorted_words = sorted(word_count.keys())
# 格式化输出
result = [f'{word}:{word_count[word]}' for word in sorted_words]
return result
if __name__ == '__main__':
print(solution("New to Python or choosing between Python 2 and Python 3 Read Python 2 or Python 3") == ['2:2', '3:2', 'New:1', 'Python:5', 'Read:1', 'and:1', 'between:1', 'choosing:1', 'or:2', 'to:1'])
print(solution("hello world hello python") == ['hello:2', 'python:1', 'world:1'])
print(solution("the quick brown fox jumps over the lazy dog") == ['brown:1', 'dog:1', 'fox:1', 'jumps:1', 'lazy:1', 'over:1', 'quick:1', 'the:2'])
3.代码详解
- 分割单词:
words = s.split()
将输入的字符串s
按照空格分割成单词列表。 - 统计词频:
word_count = Counter(words)
使用Counter
统计每个单词的出现次数。 - 排序:
sorted_words = sorted(word_count.keys())
按照单词的字母顺序对单词进行排序。 - 格式化输出:
result = [f'{word}:{word_count[word]}' for word in sorted_words]
将每个单词及其出现次数格式化为字符串,并放入列表中。
至此,完结撒花!