PYTHON(2.7): 列推导 - 从含有额外文本的.txt文件中求和数字

1 投票
2 回答
899 浏览
提问于 2025-04-18 11:47

我正在尝试让这段代码以特定的方式运行。我有一个文本文件,里面有单词和数字。我希望代码能提取出正数或负数,然后把它们加在一起。下面是文本文件中内容的一个例子,去掉了项目符号。我想用最简短的代码(代码应该尽量简洁)来实现这个功能,使用列表推导式。因为我还是个编程新手,所以任何帮助都非常感谢。


example of text and numbers in file

 - Positive 36
 - Negative: -12
 - Negative: -11
 - Positive: 42
 - Positive: 95
 - Negative: -4

这是我粗略尝试写的代码。我在理论上遇到的最大问题是如何实现选择提取正数还是负数:

    sum([int(line.strip()) for line in open("text.txt").readlines()])

2 个回答

1

你可以通过数字本身来判断它的正负,所以可以把每一行分开,拿到最后一部分:

with open('text.txt') as handle:
    numbers = (int(line.split()[1]) for line in handle)

total = sum(n for n in numbers if n > 0)

其实不需要对文件对象使用 readlines,因为直接遍历文件对象就能一行一行地获取所有内容。而且,使用生成器表达式可以少用两个字符,对于较大的文本文件来说,这样做会更快,因为不需要创建一个中间的列表。

1

根据空格分开内容,然后获取第二个元素,也就是那个整数:

with open("text.txt") as f: # using with closes your files automaticlly
    print sum([int(line.split()[1]) for line in f.readlines()])
146

你也可以直接遍历文件对象,而不需要使用readlines:

with open("out.txt") as f:
   print sum([int(line.split()[1]) for line in f])

如果你用 print ([line.split() for line in f]) 这段代码,输出结果会像这样:

 [['Positive', '36'], ['Negative:', '-12'], ['Negative:', '-11'], ['Positive:', '42'], ['Positive:', '95'], ['Negative:', '-4']]

这样你就能看到 line.split()[1] 是怎么获取到那个整数的。

撰写回答