我有一个文本文件,里面有一堆元组。我想过滤列表,如果所有数字都是奇数,或者如果数字之和小于 80,它将被删除。我如何解析列表并进行过滤?
输入:
(1, 3, 14, 38, 31)
(2, 3, 17, 32, 39)
(7, 9, 11, 12, 16)
(12, 13, 14, 16, 17)
(14, 16, 18, 38, 40)
(15, 23, 27, 31, 39)
输出:
(1, 3, 14, 38, 31)
(2, 3, 17, 32, 39)
(14, 16, 18, 38, 40)
请您参考如下方法:
算法:
- 读取输入文件并获取行
- 通过
for 循环 迭代行中的每一行
- 通过
ast从字符串格式到元组的 eval 行 - 检查总和是否小于80,如果是则继续下一行。
- 检查该行中的所有数字是否都是奇数。
- 添加到结果列表。
- 将结果写入输出文件。
代码:
from ast import literal_eval
with open("input.txt") as fp, open("output.txt", "wb") as out:
result = []
for line in fp:
tup = literal_eval(line.rstrip())
if not all(ii % 2 for ii in tup) and sum(tup) >= 80:
out.write(line)
输出文件:
(1, 3, 14, 38, 31)
(2, 3, 17, 32, 39)
(14, 16, 18, 38, 40)
