本文概述
在Python中, 我们使用词典检查是否存在项目。字典使用核心值配对以搜索键是否存在, 以及键是否存在。我们可以使用整数, 字符串, 元组作为字典键, 但不能使用列表作为键。原因如下。
Python词典如何搜索其键
如果Python字典只是遍历其键以检查给定键是否存在, 则将花费上)时间。但是python字典需要O(1)检查键是否存在。因此, 字典如何搜索关键字, 因为它为每个关键字生成一个散列值对于键, 并通过此哈希值, 它可以跟踪其元素。
如果将列表用作字典的键, 则会出现问题
列表是可变对象这意味着我们可以更改列表内的值, 以追加或删除列表的值。因此, 如果从列表生成哈希函数, 然后更改列表的项, 则字典将为此列表生成一个新的哈希值, 并且找不到它。
例如, 如果列表是a = [1、2、3、4、5]并假设列表的哈希值是列表内部值的总和。因此hash(a)=15。现在我们将6附加到a。所以a = [1、2、3、4、5、6]hash(a)=21。因此, 哈希值已更改。因此, 它在词典中找不到。
另一个问题是具有相同哈希值的不同列表。如果b = [5、5、5]hash(b)=15。因此, 如果在字典中存在a(来自上述示例, 具有相同的哈希值), 并且我们搜索b。然后字典可能给我们错误的结果。
如何处理
我们可以将列表更改为不可变的对象, 例如字符串或元组, 然后将其用作键。下面是该方法的实现。
# Declaring a dictionary
d = {}
# This is the list which we are
# trying to use as a key to
# the dictionary
a = [ 1 , 2 , 3 , 4 , 5 ]
# converting the list a to a string
p = str (a)
d = 1
# converting the list a to a tuple
q = tuple (a)
d[q] = 1
for key, value in d.items():
print (key, ':' , value)
输出如下:
[1, 2, 3, 4, 5] : 1
(1, 2, 3, 4, 5) : 1
注意怪胎!巩固你的基础Python编程基础课程和学习基础知识。
首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。