在python中表示并搜索二进制数列表

时间:2017-02-06 12:23:29

标签: python list search binary

如何根据字符串列表表示仅包含二进制数字(非整数)的列表:

str_list = ['111111', '1111011', '11110011', '11111011', '111100011', '111110011']
bin_list = [111111, 1111011, 11110011, 11111011, 111100011, 111110011]

从字符串的大小和位数不同的角度开始,是否意味着在同一元素的两个列表中搜索给出了不同的时间?这两个列表的搜索方法是否相同?

1 个答案:

答案 0 :(得分:1)

搜索方法在列表中定义,在无序列表中搜索的唯一方法是迭代(当然迭代的顺序是任意的,但没有理由将另一个用于另一种类型的数据,尤其是因为您可以将具有不同类型的对象放在同一列表中。)

因此,列表基本上不知道其中包含哪些元素,并在列表上进行迭代,如:

# basic implementation of linear search
def __contains__(self, item):
    for elem in self:
        if item == elem:
            return True
    return False

现在唯一不同的是==方法(因而是基础__eq__)。实际上:int的相等性可以更有效地计算,因为通常 32或64位可以一次比较(因为这通常是在处理器上硬连线的方式)。这与字符串形成对比,其中一个遍历字符。因此,对int s的平等检查比str以上的平等检查要快。

最后,您可以在整数上编码更紧凑的二进制数。例如1110(二进制)相当于14。你不必自己做数学:正如this answer所说,你可以简单地写0b1110,Python会把它转换成int 14