【问题标题】:How do I know what data type to use in Python?我如何知道在 Python 中使用什么数据类型?
【发布时间】:2010-12-07 11:25:02
【问题描述】:

我正在学习一些关于 Python 的教程,并且正处于尝试决定在特定情况下使用什么数据类型/结构的位置。

我不清楚数组、列表、字典和元组之间的区别。

你如何决定哪一个是合适的——我目前的理解根本无法区分它们——它们似乎是一回事。

每种方法的好处/典型用例是什么?

【问题讨论】:

  • “倾向于”?有什么选择?你会考虑什么其他的数据结构?请提供一些关于您有什么真正问题的见解。是什么让您认为字典不是正确的做法?
  • 我还是不明白这个问题。有什么方法可以提供比“决定”更具体或更具体的内容吗?你在找什么?设计教程?算法?数据结构?你能用一些关于你认为你有什么选择的细节来更新你的问题吗?你能解释一下为什么你对字典有疑问吗?
  • 你把问题改得太多了。您可能应该刚刚关闭它并创建一个新的。
  • “他们似乎是同一件事”?你能详细说明一下吗。对于您正在阅读的内容掩盖了重要细节,我仍然感到困惑。您能否用您自己的话提供链接或引用或摘要,以显示您正在阅读的描述的相似之处(且令人困惑)?
  • 如果您认为字典和列表“似乎是一回事”,您需要坐下来仔细阅读文档。很清楚为什么他们不是。

标签: python arrays types tuples


【解决方案1】:

个人: 我主要使用列表和字典。 这似乎满足了大多数情况。

有时: 元组可能很有帮助——如果你想配对/匹配元素。除此之外,我并没有真正使用它。

但是: 我编写不需要深入研究每个字节和每个内存/纳秒都很重要的核心“效率”的高级脚本。我不相信大多数人需要钻这么深。

【讨论】:

    【解决方案2】:

    元组优先。这些是无法修改的类似列表的东西。因为元组的内容不能改变,所以可以将元组用作字典中的键。在我看来,这是对他们最有用的地方。例如,如果您有一个类似item = ["Ford pickup", 1993, 9995] 的列表,并且您想创建一个包含价格的小型内存数据库,您可以尝试以下操作:

    ikey = tuple(item[0], item[1])
    idata = item[2]
    db[ikey] = idata 
    

    列表,看起来就像其他编程语言中的数组或向量,在 Python 中通常用于相同类型的事物。但是,它们更灵活,因为您可以将不同类型的事物放入同一个列表中。通常,它们是最灵活的数据结构,因为您可以将整个列表放入另一个列表的单个列表元素中,但对于实际数据处理,它们可能不够高效。

    a = [1,"fred",7.3]
    b = []
    b.append(1)
    b[0] = "fred"
    b.append(a) # now the second element of b is the whole list a
    

    字典的使用通常很像列表,但现在您可以使用任何不可变的东西作为字典的索引。然而,与列表不同的是,字典没有自然顺序,也不能就地排序。当然,您可以创建自己的包含排序列表和字典的类,以使 dict 的行为类似于有序字典。 Python Cookbook 网站上有示例。

    c = {}
    d = ("ford pickup",1993)
    c[d] = 9995
    

    当您执行繁重的数据处理并且您不想要列表或字典的装饰时,数组越来越接近位级别。它们不经常在科学应用之外使用。保留这些,直到您确定自己需要它们为止。

    列表和字典是 Python 数据存储的真正主力。

    【讨论】:

    • 我要补充一点,元组最直接对应于数学元组(对、三元组等),而不是作为对象序列的列表。因此,当您有一组包含一个项目(例如 x 和 y 坐标)的事物时使用元组,并在它们在概念上是独立的项目时列出。
    【解决方案3】:

    您如何决定使用哪种数据类型?简单:

    您查看哪些可用,然后选择可以满足您需求的那个。如果没有,你就做一个。

    在这种情况下,dict 是一个非常明显的解决方案。

    【讨论】:

    • +1。您的第二段正是这里的正确答案。
    【解决方案4】:

    计算此类元素的最佳类型通常是defaultdict

    from collections import defaultdict
    
    s = 'asdhbaklfbdkabhvsdybvailybvdaklybdfklabhdvhba'
    d = defaultdict(int)
    
    for c in s:
       d[c] += 1
    
    print d['a']   # prints 7
    

    【讨论】:

    • 为什么默认字典比普通字典更好?
    • defaultdict 为字典中没有的任何键创建默认值。在 int 的情况下,默认为 0。这样可以省去第一次检测的麻烦,并且 item 记录在 dict 中。
    • 我已经对问题进行了相当大的修改,因此对于新读者来说,这个答案可能看起来断章取义。不过,这对原始问题来说是个好问题!
    【解决方案5】:

    您真的需要速度/效率吗?然后用一个纯粹而简单的字典。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2013-02-16
      • 2011-12-26
      相关资源
      最近更新 更多