【问题标题】:Unpack to unknown number of variables?解压到未知数量的变量?
【发布时间】:2009-01-10 23:15:59
【问题描述】:

我如何将一个未知的元组解压到一个列表中?

我有许多数据列,它们被某个函数分成一个元组。我想将此元组解压缩为变量,但我不知道我将拥有多少列。有什么方法可以动态地将其解压缩为我需要的任意数量的变量?

【问题讨论】:

    标签: python casting iterable-unpacking


    【解决方案1】:

    您可以使用星号来解包可变长度,例如:

    foo, bar, *other = funct()
    

    这应该将第一项放入foo,将第二项放入bar,其余的放入other

    更新:我忘了说这仅兼容 Python 3.0。

    【讨论】:

      【解决方案2】:

      将元组解包到列表中?

      l = list(t)
      

      【讨论】:

      • 但我很好奇你为什么要这么做。 =)
      • PEZ,我正在制作一个脚本来使用 numpy 函数“loadtxt”来处理一堆绘图。数据列的数量仅在运行时才知道,所以我无法创建 var 名称。
      • 是的,但如果你有一个元组中的数据,你通常仍然可以像使用列表一样使用它。 t[1] 将为您提供与 l[1] 相同的数据,而无需“解包”。当然,如果您要“就地”修改数据,您是否需要一个列表。
      • @PEZ - 意识到我在颠簸,但这可能很有用,例如用于解包参数或复杂解析。例如: (opt1, opt2,) = tuple(argument.split('-')[2:]) - 此代码实际上不起作用,因为 opt1 和 2 不是可选的,而是必须存在的。不是世界上最好的用例,但我在这个主题上的谷歌搜索把我带到了这里。
      【解决方案3】:

      您的意思是要动态创建变量吗?如果它们是动态创建的,您的程序如何知道如何引用它们?

      元组有长度,就像列表一样。完全可以这样做:

      total_columns = len(the_tuple)
      

      您也可以将元组转换为列表,但这样做没有任何好处,除非您想开始修改结果。 (元组不能修改;列表可以。)但是,无论如何,将元组转换为列表是微不足道的:

      my_list = list(the_tuple)
      

      种方法可以动态创建变量(例如,使用eval),但同样,您怎么知道如何引用它们?

      我认为您应该明确说明您要在这里做什么。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-27
        • 1970-01-01
        • 2018-05-31
        相关资源
        最近更新 更多