Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么时候使用Set比Map更合理?_Python_Dictionary_Oop_Set - Fatal编程技术网

Python 什么时候使用Set比Map更合理?

Python 什么时候使用Set比Map更合理?,python,dictionary,oop,set,Python,Dictionary,Oop,Set,例如,我有一堆物体,比如说汽车。我需要跟踪公司的车队。显然,汽车是唯一的(VIN编号),所以它们可以组成一个集合 但是我需要每天改变车队中一些汽车的状态,比如说给它们加油 现在哪种构造有意义?为什么? 以VIN编号为键,以汽车实例为值的字典 一组汽车,然后在Car.vin属性上匹配 请记住,集合和映射/dict都使用散列散列元素需要是不可变的,最好是小的(更快的散列计算) 在您的情况下,我们不知道car实例中有什么,也不知道它是否发生了变化。也许你可以更换一些零件或更换车主?如果这些存储在实例中

例如,我有一堆物体,比如说汽车。我需要跟踪公司的车队。显然,汽车是唯一的(VIN编号),所以它们可以组成一个集合

但是我需要每天改变车队中一些汽车的状态,比如说给它们加油

现在哪种构造有意义?为什么?

  • 以VIN编号为键,以汽车实例为值的字典
  • 一组汽车,然后在Car.vin属性上匹配

  • 请记住,集合和映射/dict都使用散列散列元素需要是不可变的,最好是小的(更快的散列计算)

    在您的情况下,我们不知道car实例中有什么,也不知道它是否发生了变化。也许你可以更换一些零件或更换车主?如果这些存储在实例中,则汽车必须是可变的

    因此,哈希的明显选择是选择一个不会改变的短VIN号。->你应该使用地图(dict)


    +在Python中,类在默认情况下是可变的,因此更容易使用某种(alpha)数字id或一对(tuple)这样的元素。

    从我看到的情况来看,将数据保存在字典中是一种更合适的方法

    如果您必须更改汽车对象的状态,这意味着您必须搜索该汽车(通过
    VIN编号
    ),并且dict可以在O(1)时间复杂度内完成这项工作,我看不出您如何通过
    VIN编号
    搜索集合中的汽车对象(您不能)

    您可以使用集合,如果VIN是
    汽车唯一使用的东西。但是,如果您需要通过VIN访问
    汽车
    ,则设置对您没有帮助;集合不支持直接访问特定元素的概念。