【问题标题】:Is there a array-like class that implement quick search adding words in alphabet order? [duplicate]是否有一个类似数组的类可以实现按字母顺序添加单词的快速搜索? [复制]
【发布时间】:2020-08-09 18:32:38
【问题描述】:

我正在尝试构建一个 python 脚本,它递归地从目录中读取文本文件,并将所有文件中的所有单词保存到一个数组(我们称之为数组-A)。

我有另一个数组,它有一个预定义单词的列表(我们称之为数组-B)。例如:

['hello', 'cat', 'dog', 'mouse',...]

我要做的是,对数组-A中的每个单词,检查它是否在数组-B中,如果不是,添加它。

我做了那个脚本,但是对于大数组(对于很多单词)来说它需要很长时间,因为它的 O(2^n) - 对于数组 A 中的每个单词,检查它是否在它的数组 B 中。

在实现按字典顺序添加单词(以允许快速搜索算法)和使用快速搜索搜索单词之前,我想知道是否已经有 python 类可以做到这一点。

【问题讨论】:

    标签: python arrays python-3.x


    【解决方案1】:

    只需使用 dict(如 {'hello':1, 'cat':1, 'dog':1, 'mouse':1, ...}),每个单词的平均分期成本为 O(1)。

    【讨论】:

    • 如果你想要这个列表,最后你可以用 .keys() 生成它
    • 但是我仍然需要搜索该词是否在字典中,不是吗?如果我运行“if word in dictionary”,是不是就像遍历数组一样?
    【解决方案2】:

    如果您想要一个最终数组,两个数组中的每个单词都只出现一次,试试这个:

    new_arr = list(set(arrA + arrB))  # + adds both arrays, set deletes more than one occurrence
    

    【讨论】:

    • 但是要删除双重出现它必须运行双重循环,不是吗?我认为它仍然是 O(n^2)
    • 也许可以,但据我所知,使用集合是删除重复出现的最快方法,因此它应该比以前更快。试试看,希望会更好
    • @asmd 不,不是。
    猜你喜欢
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2012-09-03
    • 2015-02-12
    相关资源
    最近更新 更多