所以我是一个长期的perl脚本编写者,因为几个月前我换了工作,所以他已经习惯了python。通常在perl中,如果我有一个值列表,我需要检查一个变量(只是为了查看列表中是否有匹配),我发现更容易生成哈希来检查,而不是将值放入一个数组,如下:
$checklist{'val1'} = undef;
$checklist{'val2'} = undef;
...
if (exists $checklist{$value_to_check}) { ... }
显然,由于需要无用的右手值,这会浪费一些内存,但IMO比循环数组更有效,更容易编码。
现在在python中,无论你是在搜索列表还是字典,它的代码都是完全相同的:
if value_to_check in checklist_which_can_be_list_or_dict:
<code>
所以我真正的问题是:在perl中,哈希方法更适合处理速度而不是迭代数组,但在python中是否正确?鉴于代码是相同的,我想知道python是否更好地列出迭代?我还应该将字典方法用于更大的列表吗?
答案 0 :(得分:6)
字典是哈希。列表上的in
测试必须遍历每个元素以进行检查,而字典上的in
测试使用散列来查看密钥是否存在。 Python只是不会让你明确地遍历列表。
Python也有set
数据类型。它基本上是没有右手值的哈希/字典。如果你想要的是能够建立一个集合的东西,那么测试那个集合中是否有某些东西,你不关心事物的顺序或者事物是否在集合中多次,那么set
正是你想要的!