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

时间:2013-07-11 21:13:55

标签: python data-structures

我有一个名为Materials

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

正如您最初所看到的那样,它只存储每个元素,然后对元素进行分组。

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

修改以反映以下评论:

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

1 个答案:

答案 0 :(得分:2)

我会去@ 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,就可以了。

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