【问题标题】:Parsing indeterminate amount of data into a python tuple将不确定数量的数据解析为python元组
【发布时间】:2010-09-14 06:27:22
【问题描述】:

我有一个包含字符串列表的配置文件。我需要按顺序读取这些字符串并将它们存储在内存中,当某些事件发生时,我将多次迭代它们。因为一旦从文件中读取它们我就不需要添加或修改列表,元组似乎是最合适的数据结构。

但是,我对首先构造元组的最佳方式有点困惑,因为它是不可变的。我应该把它们解析成一个列表然后把它们放在一个元组中吗?这很浪费吗?有没有办法让它们首先进入一个元组,而无需每次添加新元素时复制/销毁元组的开销。

【问题讨论】:

    标签: python list tuples


    【解决方案1】:

    正如你所说,你将逐渐读取数据 - 所以元组毕竟不是一个好主意,因为它是不可变的。

    是否有理由不使用简单的列表来保存字符串?

    【讨论】:

    • 一点也不。我只是好奇我猜最pythonic的方式是什么。将其解析为列表然后转换为元组是一种合理的方法吗?我知道我在过早地优化,但在这一点上主要是为了我自己的理解
    • @Falmarri :看看下面的另一个对话。访问时间几乎相同。只是创建时间略有不同。由于您将修改元素,因此您最终将在元组和列表之间来回转换。更快的创建时间优势在此过程中大部分消失了。
    【解决方案2】:

    由于您的数据正在发生变化,我不确定您是否需要一个元组。列表应该没问题。

    请看下面的内容,它应该为您提供更多信息。分配一个元组比分配一个列表要快得多。但是,如果您不时尝试修改元素,那么创建元组可能就没有意义了。

    【讨论】:

    • 一旦在内存中创建了列表/元组,在程序重新运行之前它不会改变。估计会运行很长时间才重新启动。
    • @Falmarri :创建列表后,访问时间几乎相同。因此,获得的任何优势充其量都可以忽略不计,并且在创建期间您将需要一个列表,因为元素仅在启动期间被识别。
    【解决方案3】:

    我不会担心首先创建一个列表然后从该列表中创建一个元组的开销。我的猜测是,如果你测量它,开销将可以忽略不计。

    另一方面,我会坚持使用列表并对其进行迭代,而不是创建一个元组。元组应该用于数据结构之类的数据和数据列表的列表,这就是你的数据听起来像我。

    【讨论】:

      【解决方案4】:
      with open("config") as infile:
          config = tuple(infile)
      

      【讨论】:

      • 修剪一些换行符? config = tuple(line.rstrip() for line in infile) 几乎一样简单。
      • 如果文件仅包含字符串列表,这将起作用。里面还有其他信息。
      【解决方案5】:

      您可能想尝试使用链式生成器来创建您的元组。您可以使用生成器对输入执行多个过滤和转换操作,而无需创建中间列表。所有生成器处理都延迟到迭代。在下面的示例中,处理/迭代都发生在最后一行。

      像这样:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-25
        • 2017-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多