计算不包含某些字符串的列表元素的数量

时间:2014-11-08 18:33:55

标签: python

我有一个包含900000行的非常大的文本文件。我必须计算没有' year1995'和' year1996'在线。我做了如下:

fname = r"data.txt"
with open(fname,'r') as fi:
    lines = fi.read().splitlines()
    print len(lines)
    test = [l for l in lines if 'year1995' or 'year1996' not in l]
    print len(test)

但是我的代码没有产生预期的结果。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您所拥有的代码会将每一行放在test中。这是因为第一个if语句将始终评估为True,因为非空字符串是真实的。在理解中更改测试:

[l for l in lines if not ('year1995' in l or 'year1996' in l)]

答案 1 :(得分:1)

创建一个列表扔掉它是没有意义的,只需使用sum:

with open(fname,'r') as fi:
       print sum(not any(x in line for x in ('year1995','year1996' ) ) for line in fi)
也不需要

lines = fi.read().splitlines(),只需遍历每行的文件对象。

答案 2 :(得分:0)

您需要将if条件更改为:

if not 'year1995' in l or not 'year1996' in l

if not ('year1995' in l or 'year1996' in l)

注意:您需要在not操作后添加条件