python - 什么是合适的 Python 数据结构来保存其项目及其项目的组合列表?

标签 python data-structures

我有一个名为Materials的列表

MATERIALS = [
    'AR',
    'ARU',
    'ARC',
    'CON',
    'CSR',
    'MCR',
    'USF',
    ['AR', 'ARU', 'ARC', 'MCR', 'CSR'],
    ['AR', 'ARU', 'ARC', 'MCR'],
    ['AR', 'ARU', 'ARC'],
]

正如您所看到的,它首先单独存储每个元素,然后对元素进行分组。

存储此混合类型列表的适当数据结构是什么?

编辑以反射(reflect)以下评论:

  1. 通过存储,我真正的意思是,将变量存储在内存中的适当方式是什么
  2. 此列表说明了将输入数值模型的不同测试用例。因此,第一项是对 Material 中的每个项目进行建模。
  3. 我希望避免冗余并遵循最佳实践

最佳答案

我会选择@joel-cornett 评论,即存储数据类型的一致性。

MATERIALS = [
    ['AR'],
    ['ARU'],
    ['ARC'],
    ['CON'],
    ['CSR'],
    ['MCR'],
    ['USF'],
    ['AR', 'ARU', 'ARC', 'MCR', 'CSR'],
    ['AR', 'ARU', 'ARC', 'MCR'],
    ['AR', 'ARU', 'ARC'],
]

如果这不适合您,那么有两个列表。如果您提前知道您的模型,您最好使用变量而不是字符串:

AR = 'AR'
ARU = 'ARU'
ARC = 'ARC'
CON = 'CON'
CSR = 'CSR'
MCR = 'MCR'
USF = 'USF'

MATERIALS_SIMPLE = [
    AR,
    ARU,
    ARC,
    CON,
    CSR,
    MCR,
    USF,
]

MATERIALS = [
    [AR, ARU, ARC, MCR, CSR],
    [AR, ARU, ARC, MCR],
    [AR, ARU, ARC],
]

只要你的性能不受限制,我会告诉你不要费心去优化内存存储。例如,如果您只需要处理数据,只要您的数据不大于您的 RAM,就可以。

至于冗余,如果您的意思是某些列表共享一个公共(public)前缀并且您想利用它,则可以使用 trie 数据结构 ( http://en.wikipedia.org/wiki/Trie )。但我不推荐它,因为它很复杂并且缺乏可读性。

关于python - 什么是合适的 Python 数据结构来保存其项目及其项目的组合列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17603632/

相关文章:

list - Haskell 中最先进的廉价列表操作?

python - 从Python中的字符串中删除第一组字符

python - Py_InitModule4()在嵌入式Python解释器(使用Cython)上返回NULL

python - Django 管理站点不显示 ManyToManyField 关系

c - 我在这个程序中犯了什么错误,它将通过运行时错误?

algorithm - 一个 "constant"Set ADT的高效实现

python - 使用 lxml 展平 DOM 最有效的方法是什么?

python - 如何在 Pandas 中遍历 DataFrame 中的行

python - Seed Pylab 的随机数生成器?

c - 从队列中取出特定值?