我有一个包含字符串列表的配置文件。我需要按顺序读取这些字符串并将它们存储在内存中,并且当某些事件发生时我会多次迭代它们。因为一旦从文件中读取它我不需要添加或修改列表,元组似乎是最合适的数据结构。
但是,我对首先构造元组的最佳方法感到有些困惑,因为它是不可变的。我应该将它们解析成列表然后将它们放入元组中吗?那是浪费吗?有没有办法让它们首先进入元组,而不会在每次添加新元素时复制/销毁元组。
答案 0 :(得分:2)
正如你所说,你将逐渐阅读数据 - 所以一个元组毕竟不是一个好主意,因为它是不可改变的。
是否有理由不使用简单的列表来保存字符串?
答案 1 :(得分:1)
我不担心首先创建一个列表然后从该列表中创建一个元组的开销。我的猜测是,如果你测量它,开销就会微不足道。
另一方面,我会坚持使用列表并迭代它而不是创建一个元组。元组应该用于类似数据的结构和数据列表的列表,这就是你的数据对我来说的意思。
答案 2 :(得分:1)
由于您的数据正在发生变化,我不确定您是否需要元组。列表应该没问题。
请查看以下内容,以便为您提供更多信息。分配元组比分配列表快得多。但是,如果你不时尝试修改元素,那么创建一个元组可能没有多大意义。
答案 3 :(得分:0)
with open("config") as infile:
config = tuple(infile)
答案 4 :(得分:0)
您可能想尝试使用链式生成器来创建元组。您可以使用生成器对输入执行多个筛选和转换操作,而无需创建中间列表。所有的生成器处理都被延迟到迭代。在下面的示例中,处理/迭代都发生在最后一行。
像这样:
f = open('settings.cfg')
step1 = (tuple(i.strip() for i in l.split(':', 1)) for l in f if len(l) > 2 and ':' in l)
step2 = ((l[0], ',' in l[1] and 'Tag' in l[0] and l[1].split(',') or l[1]) for l in step1)
t = tuple(step2)