【问题标题】:How do I yield a pre-unpacked list?如何生成预先解包的清单?
【发布时间】:2010-08-29 04:06:32
【问题描述】:

我有一个在itertools.groupby 操作中创建的列表:

def yield_unpacked_list():
    for key, grp in itertools.groupby(something_to_groupby, key=lambda x: x[0]):
        subset_of_grp = list(item[2] for item in list(grp))
        yield key, subset_of_grp

例如,如果subset_of_grp 变成[1, 2, 3, 4][5, 6, 7, 8]

for m in yield_unpacked_list():
    print m

会打印出来:

('first_key', [1, 2, 3, 4])
('second_key', [5, 6, 7, 8])

现在,回到我的函数定义。显然以下是语法错误(* 运算符):

def yield_unpacked_list():
    for key, grp in itertools.groupby(something_to_groupby, key=lambda x: x[0]):
        subset_of_grp = list(item[2] for item in list(grp))
        yield key, *subset_of_grp

我希望 same print 循环的以下结果没有 [list] 括号:

('first_key', 1, 2, 3, 4)
('second_key', 5, 6, 7, 8)

请注意,print 仅用于说明目的。我还有其他功能可以从简化的tuple 结构中受益。

【问题讨论】:

    标签: python group-by yield itertools iterable-unpacking


    【解决方案1】:

    yield (key,) + tuple(subset_of_grp)

    【讨论】:

      【解决方案2】:
      def yield_unpacked_list():
          for key, grp in itertools.groupby(something_to_groupby, key=lambda x: x[0]):
              yield (key,) + tuple(item[2] for item in grp)
      

      从您想要打印的结果来看,很明显您想要生成一个tuple——不知道为什么您将其称为“未打包列表”,但无论如何,您就是这样。我还删除了几个对 list 的调用,它们在您的代码中根本没有任何用处。

      【讨论】:

        猜你喜欢
        • 2018-09-24
        • 1970-01-01
        • 1970-01-01
        • 2014-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-08
        • 2011-04-24
        相关资源
        最近更新 更多