1. 实现一个函数,要求将一个字符串中的所有奇数位上的字母按照字母表的顺序重新排列,并将所有偶数位上的数字按照从小到大的顺序排列。
【样例数据】
字符串为abcde1234567890
【样例输出】
a1b2c3d4e567890
【要求】
只能使用 Python 内置函数和标准库函数,不能使用任何第三方库或函数。
【答案】
def transform_string(string):
odd_letters = [c for i, c in enumerate(string) if i % 2 == 0 and c.isalpha()]
even_digits = [c for i, c in enumerate(string) if i % 2 == 1 and c.isdigit()]
odd_letters.sort()
even_digits.sort()
return ''.join(odd_letters + even_digits)
string = "abcde1234567890"
result = transform_string(string)
print(result)
2. 实现一个Python程序,可以读取一个文本文件中的单词,统计每个单词出现的次数,并将结果按照出现次数从高到低排序输出。
【要求】
- 实现一个函数
count_words
,接收一个文件名作为参数,并返回一个包含每个单词出现次数的字典。 - 在函数
count_words
中使用 Python 正则表达式库re
来匹配单词,并使用 Python 内置函数collections
中的Counter
对象来统计单词出现次数。 - 输出结果按照单词出现次数从高到低排序,并输出每个单词及其出现次数。
【答案】
import re
from collections import Counter
def count_words(filename):
with open(filename, 'r') as f:
text = f.read()
words = re.findall(r'\b\w+\b', text)
word_counts = Counter(words)
sorted_word_counts = sorted(word_counts.items(), key=lambda x: x[1], reverse=True)
for word, count in sorted_word_counts:
print(f"{word}: {count}")
count_words('example.txt')
3. 实现一个Python程序,要求能够求解一个包含n个实数的数组的所有k个元素的组合的和,并将这些组合以及它们的和保存到一个二维列表中。
【要求】
- 实现一个函数
combinations_sum
,接收三个参数,第一个参数是包含n个实数的数组,第二个参数是数组的组合大小k,第三个参数是起始索引start。 - 在函数
combinations_sum
中,使用递归方法来生成所有大小为组合大小k的组合,并计算这些组合的和。 - 从起始索引start开始,将每个组合以及它们的和添加到二维列表中。
- 返回一个二维列表,其中每个元素是一个包含两个元素的元组,第一个元素是组合,第二个元素是组合的和。
【样例数据】
数组为 [1, 2, 3, 4],组合大小为 2,起始索引为 1
【样例输出】
[([1, 2], 3), ([1, 3], 4), ([1, 4], 5), ([2, 3], 5), ([2, 4], 6), ([3, 4], 7)]
【提示】
其中每个元素都是一个包含两个元素的元组,第一个元素是组合,第二个元素是组合的和。
【答案】
def combinations_sum(arr, k, start):
if k == 0:
return []
if k == 1:
return [(arr[start], arr[start])]
else:
result = []
i = start + 1
while i < len(arr):
result += combinations_sum(arr, k - 1, i)
i += 1
result += combinations_sum(arr, k - 1, start)
return result
4. 实现一个Python程序,要求能够求解一个包含n个整数(n从1到100)的列表中所有可能的排列,并将这些排列保存到一个二维列表中。
【要求】
- 实现一个函数
permutations
,接收一个包含n个整数的列表作为参数。 - 在函数
permutations
中,使用递归方法来生成所有可能的排列。 - 返回一个二维列表,其中每个元素是一个包含n个元素的列表,代表一个排列。
【样例数据】
列表为 [1, 2, 3]
【样例输出】
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
【答案】
def permutations(nums):
def backtrack(start, end):
if end == len(nums):
result.append(nums[start:end])
else:
for i in range(start, end):
nums[start], nums[i] = nums[i], nums[start]
backtrack(start + 1, end)
nums[start], nums[i] = nums[i], nums[start]
result = []
backtrack(0, len(nums))
return result
5. 实现一个Python程序,要求能够求解一个包含n个整数的列表中所有可能的排列和组合的总数,并将这些排列和组合的总数保存到一个变量中。
【要求】
- 实现一个函数
count_permutations_and_combinations
,接收一个包含n个整数的列表作为参数。 - 在函数
count_permutations_and_combinations
中,使用递归方法来生成所有可能的排列和组合的总数。 - 返回一个变量,表示所有排列和组合的总数。
【样例数据】
列表为[1, 2, 3]
【样例输出】
20
【答案】
def count_permutations_and_combinations(nums):
def backtrack(start, end):
if end == len(nums):
global total_count
total_count += len(nums[start:end])
else:
for i in range(start, end):
backtrack(start, i)
backtrack(i + 1, end)
total_count = 0
backtrack(0, len(nums))
return total_count
(本文习题难读为超高级,如有问题请私信我,我一定给你保姆级教程!)