在一个文件中查找不在python中另一个文件中的所有数字

Arjun Muraleedharan:

有两个文件,分别是FileA和FileB,我们需要找到FileA中所有的编号,而FileB中没有这些编号。FileA中的所有数字均已排序,FileB中的所有数字均已排序。例如,

输入:

FileA = [1, 2, 3, 4, 5, ...]
FileB = [1, 3, 4, 6, ...]

输出:

[2, 5, ...]

内存非常有限,甚至无法一次将一个完整的文件加载到内存中。同样需要线性或更短的时间复杂度。

因此,如果文件足够小以适合内存,我们可以加载它们并将其内容初始化为两个集合,然后取一个集合差,以便以O(1)或恒定时间复杂度解决问题。

set(contentsofFileA)-set(contentsofFileB)

但是由于文件太大,它们将无法完全加载到内存中,因此这是不可能的。

同样,另一种方法是在批处理中使用蛮力方法。因此,我们从FileA加载数据块或一批,然后从FileB加载数据块,然后比较它,然后再从FileB加载下一块,依此类推。然后,在对FileB中的所有元素进行FileA块检查之后,再从FileA加载下一批,然后继续进行。但这会产生O(n ^ 2)或二次时间复杂度,对于具有大条目的超大文件而言效率不高。

需要以线性或更短的时间复杂度来解决该问题,并且不将整个文件加载到内存中。有什么帮助吗?

yukashima huksay:

如果你想逐行读取文件行,因为你没有那么多的内存,您可以根据需要与国际热核实验堆,如果你的文件是基于线做线性解决方案,否则看这个

首先,您可以在终端中执行此操作以生成一些测试文件:

seq 0 3 100 > 3k.txt
seq 0 2 100 > 2k.txt

然后运行以下代码:

i1 = iter(open("3k.txt"))
i2 = iter(open("2k.txt"))
a = int(next(i1))
b = int(next(i2))
aNotB = []
# bNotA = []
while True:
    try:
        if a < b:
            aNotB += [a]
            a = int(next(i1, None))
        elif a > b:
            # bNotA += [a]
            b = int(next(i2, None))
        elif a == b:
            a = int(next(i1, None))
            b = int(next(i2, None))
    except TypeError:
        if not b:
            aNotB += list(i1)
            break
        else:
            # bNotA += list(i1)
            break
print(aNotB)

输出:

[3、9、15、21、27、33、39、45、51、57、63、69、75、81、87、93、99]如果要同时获取aNotB和bNotA的结果,则可以取消注释这两个线。

时间与Andrej Kesely的答案进行比较:

$ seq 0 3 1000000 > 3k.txt
$ seq 0 2 1000000 > 2k.txt
$ time python manual_iter.py        
python manual_iter.py  0.38s user 0.00s system 99% cpu 0.387 total
$ time python heapq_groupby.py        
python heapq_groupby.py  1.11s user 0.00s system 99% cpu 1.116 total

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python在一个列表中查找不在另一个列表中的元素

在另一个目录中打开文件(Python)

在另一个文件中查找一个文件的内容

linux bash-从另一个目录中删除一个目录中的所有文件

从Python中的另一个文件调用函数

将一个文件中的所有字符串实例替换为另一个文件

在一个文件中查找不在另一个文件中的行的快速方法?

Python导入模块在另一个文件中

从另一个文件中调用Python函数

在R中,除了使用for循环之外,是否有一种从列表中选择不在另一个列表中的所有数字的快速方法?

用一个文件中的数字替换另一个文件中的数字

查找一个文件中另一个文件中记录的匹配项

删除数组中另一个数组中的所有数字

如何查找一个用户拥有的所有文件并将它们复制到RHEL 8中的另一个目录?

如何将几个文本文件中唯一的所有数字导出到另一个文件中?

SQL COUNT来计数另一个表中的所有数字

Git:列出另一个分支中不在当前分支中的所有文件?

CSS不在一个文件中工作,而在另一个文件中工作

python将所有模块导入到一个python文件中,我们可以将其导入另一个文件中?

python-在具有两个条件的另一个文件中查找字典键

从另一个文件中删除文件中与文本不匹配的所有行

bat文件不在另一个使用Python的文件夹中时运行

查找不在另一个表中的记录

过滤所有数字存在于另一个矩阵中的所有行

如果txt文件的行以另一个txt文件python中的数字开头

如果没有记录 ID,在一个表中查找不在另一个表中的记录?

在 VSCode 中从另一个 python 文件导入一个 python 文件

使用一个文件中的字段来查找另一个文件中的字段并打印与两个文件中的字段的所有匹配项

如何增加位于python中另一个文件中的数字