Python:遍历列表元素检查与文本文件产品的匹配及代码问题
解决列表元素与文本文件内容匹配的循环问题
嘿,我清楚你碰到的问题了——你的嵌套循环之所以出异常,核心原因是文件指针的位置问题。当你第一次调用pro_file.readlines()时,它会把整个文件内容一次性读完,此时文件指针会直接跳到文件末尾。后面外层循环再迭代其他元素时,readlines()只能读到空列表,自然就没法再做匹配检查了。
给你两个实用的解决方案,从基础实现到效率优化都覆盖到了:
方案1:先读取文件内容并存储(基础版)
先把文件里的所有内容一次性读取出来,处理成干净的列表,之后直接用这个列表做匹配检查,避免重复读取文件:
print("Opening a file") # 用with语句自动管理文件,不用手动关闭,更安全 with open("inventory.txt", "r") as pro_file: # 读取每一行并去掉换行符、空格等冗余内容 inventory_items = [line.strip() for line in pro_file] productList = ['chips', 'biscuits', 'pasta', 'cheese', 'bread', 'rice', 'honey', 'butter', 'cake', 'salt'] for key in productList: if key in inventory_items: print(f"found {key}")
方案2:用集合优化匹配速度(适合大文件)
如果你的inventory.txt内容很多,把内容转成集合能让in操作的速度大幅提升(集合的查找是O(1)复杂度,列表是O(n)):
print("Opening a file") with open("inventory.txt", "r") as pro_file: inventory_set = {line.strip() for line in pro_file} productList = ['chips', 'biscuits', 'pasta', 'cheese', 'bread', 'rice', 'honey', 'butter', 'cake', 'salt'] for key in productList: if key in inventory_set: print(f"found {key}")
额外说明
- 为什么不推荐你原来的嵌套循环?除了文件指针的问题,嵌套循环本身效率很低——每检查一个产品就要读一遍文件,完全是没必要的重复操作。
strip()方法一定要加,它会去掉每行开头结尾的换行符、空格、制表符等,避免因为这些冗余字符导致匹配失败(比如文件里是chips\n,你的列表里是chips,直接匹配会失败)。with语句是Python处理文件的最佳实践,它会在代码块结束后自动关闭文件,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Usman
相关产品推荐
相关产品推荐

