1

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

同じ printループの次の結果が[list]括弧なしになるようにします。

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

ここでprintは説明のみを目的としていることに注意してください。単純化された構造の恩恵を受ける他の機能がありtupleます。

4

2 に答える 2

5

yield (key,) + tuple(subset_of_grp)

于 2010-08-29T04:09:03.480 に答える
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また、コード内でまったく役に立たなかったへの呼び出しをいくつか削除しました。

于 2010-08-29T04:11:10.620 に答える