如何根据字符串列表表示仅包含二进制数字(非整数)的列表:
str_list = ['111111', '1111011', '11110011', '11111011', '111100011', '111110011']
bin_list = [111111, 1111011, 11110011, 11111011, 111100011, 111110011]
从字符串的大小和位数不同的角度开始,是否意味着在同一元素的两个列表中搜索给出了不同的时间?这两个列表的搜索方法是否相同?
答案 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
。