顺序搜索 2 列表

Posted

技术标签:

【中文标题】顺序搜索 2 列表【英文标题】:Sequential Search 2 Lists 【发布时间】:2015-08-18 21:28:52 【问题描述】:

因此,对于家庭作业,我们被要求编写一个函数,该函数将 2 个列表作为输入,并使用顺序/线性搜索来遍历它们,如果两个列表中都出现了任何名称,则将该名称附加到新列表中。对于实际分配,两个类被指定为 VoterList 和 VoterName,因此不允许我们使用“in”,并且只有 VoterNames 可以附加到 VoterList。 (这项任务将发展为在两个不同的投票站为一次选举寻找两次投票的人)。

所以我编写了一个函数,当我传入 3-4 人的长列表时,它似乎可以工作,但我不确定它实际上是一个顺序搜索,它应该如何工作。一些建议会很棒。干杯

def fraud_detect_seq(first_booth_voters, second_booth_voters):
    fraud = []    

    length_first = len(first_booth_voters)
    length_second = len(second_booth_voters)

    first_booth_position = 0
    second_booth_position = 0


    while first_booth_position < length_first:
        name_comparison = first_booth_voters[first_booth_position]

        if second_booth_position == length_second:
            first_booth_position += 1
            second_booth_position = 0

        elif second_booth_voters[second_booth_position] == name_comparison:
            fraud.append(second_booth_voters[second_booth_position])
            first_booth_position += 1
            second_booth_position += 1

        elif second_booth_voters[second_booth_position] != name_comparison:
            second_booth_position += 1


    print(fraud)

fraud_detect_seq(['Jackson', 'Dylan', 'Alice'],['Jackson', 'ylan', 'Alice'])

获取输出:

['Jackson', 'Alice']

这是正确的。但我觉得我做得不对。

【问题讨论】:

为什么不使用in?遍历第一个列表,检查其项目是否在第二个列表中。 不允许在:)中使用 然后模仿它的功能——这将添加第二个(内部)循环 我编写此代码的方式似乎提供了所需的输出?或者这个函数会被更大的列表破坏吗? 看起来有点冗长。一方面——为什么要使用索引和长度? for name in list1: #check if also in list2 更惯用。即使不使用in,您也应该能够在大约 6 行代码中得到解决方案。 【参考方案1】:
def fraud_detect_seq(first_booth_voters, second_booth_voters):
    fraud = []

    for voter in first_booth_voters:
        if voter in second_booth_voters:
           fraud.append(voter)

这是检查它们是否在两个列表中的一种非常简单的方法。编写程序并没有错误的方法,但是由于您使用的是 python,因此您最好还是我们最“pythonic”。 For 循环在 python 中用于检查列表中的成员资格非常有用。

【讨论】:

您好,感谢您的回复,但我们不允许在原帖中使用 python 'in' :) 如果 OP 清楚地表明某事是家庭作业,您应该尽量不要超出给出提示的范围。

以上是关于顺序搜索 2 列表的主要内容,如果未能解决你的问题,请参考以下文章

列表查找及二分查找

什么时候顺序搜索比二分搜索好?

二分搜索 O(log n) 算法在顺序列表中查找重复项?

Python 模块化 模块搜索顺序重复导入模块加载列表

以随机顺序搜索包含特定字母的列表中的字符串

顺序搜索:未检测到输入长度 Python