如何用Python从文本文件提取整数并生成列表、排序、获取长度及中位数
解决方法
你的代码存在几个核心问题:
- 遍历每个字符导致多位数被拆分成单个数字输出
- 未将提取的数字存储到列表中,后续无法进行排序和中位数计算
get_median函数逻辑混乱,变量未正确定义且无法获取前一步的数字数据
以下是修正后的完整代码,附带详细说明:
from statistics import median def extract_integers_from_file(file_path): integers = [] # 定义需要去除的标点符号,可根据实际文件内容补充 punctuation = ".,!?;:\"'-()[]{}" with open(file_path, 'r') as f: for line in f: # 按空格分割每行成单词列表 words = line.split() for word in words: # 去除单词前后的标点符号 cleaned_word = word.strip(punctuation) # 判断清理后的字符串是否为正整数 if cleaned_word.isnumeric(): # 转换为整数并添加到列表 integers.append(int(cleaned_word)) return integers if __name__ == '__main__': file_path = 'C:\\Users\\wildk\\Desktop\\Numbers_in_text.txt' # 提取文件中的整数列表 num_list = extract_integers_from_file(file_path) # 对整数列表排序 sorted_nums = sorted(num_list) # 打印结果 print("排序后的整数列表:", sorted_nums) print("列表长度:", len(sorted_nums)) if sorted_nums: # 避免空列表调用median时报错 print("中位数:", median(sorted_nums)) else: print("列表为空,无法计算中位数")
关键修正说明:
- 提取完整整数:不再遍历单个字符,先分割出单词,清理前后标点后判断是否为完整数字,确保多位数被正确识别
- 存储数据到列表:用
append()将提取到的整数存入列表,为后续排序和计算提供数据基础 - 函数职责拆分:
extract_integers_from_file专注于从文件提取整数并返回列表,主函数负责排序、计算和结果打印 - 异常情况处理:添加空列表判断,避免无数字时调用
median()报错 - 标点清理:通过
strip(punctuation)去除单词前后的常见标点,确保类似"123,"或"(456)"的数字能被正确识别
如需处理负整数
如果文件中包含负整数(如"-789"),可修改判断逻辑:
if cleaned_word.lstrip('-').isnumeric() and cleaned_word.count('-') <= 1: integers.append(int(cleaned_word))
内容的提问来源于stack exchange,提问作者Genevieve Higdon
相关产品推荐
相关产品推荐

