数组与哈希键搜索
我之前一直在用perl写脚本,最近几个月因为换了工作开始学习python。在perl中,如果我有一堆值需要检查某个变量是否匹配(就是看看这个变量在不在这堆值里),我发现用哈希表来检查会比把值放到数组里更简单,像这样:
$checklist{'val1'} = undef;
$checklist{'val2'} = undef;
...
if (exists $checklist{$value_to_check}) { ... }
当然,这样做会浪费一些内存,因为需要一个没用的右边值,但在我看来,这样写起来更高效,也更容易,而不是一个一个遍历数组。
现在在python中,无论是查找列表还是字典,代码都是一样的:
if value_to_check in checklist_which_can_be_list_or_dict:
<code>
所以我真正想问的是:在perl中,使用哈希表的方法因为处理速度快而被偏爱,而在python中也是这样吗?既然代码是一样的,我在想python的列表遍历是否更好?对于更大的列表,我还应该使用字典的方法吗?
1 个回答
6
字典其实就是一种哈希表。在列表中用 in
来检查某个元素是否存在时,程序需要一个一个地检查每个元素。而在字典中,使用 in
检查某个键是否存在时,程序会利用哈希技术快速判断,这样就不需要逐个遍历了。
Python 还有一种叫 set
的数据类型。它可以看作是没有右边值的哈希表/字典。如果你想要建立一个东西的集合,并且想检查某个东西是否已经在这个集合里,而不在乎这些东西的顺序或者某个东西是否重复出现,那么 set
就非常适合你!