事前に不パックされたリストを生成するにはどうすればよいですか?
-
01-10-2019 - |
質問
anで作成されたリストがあります 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
構造。
解決
yield (key,) + tuple(subset_of_grp)
他のヒント
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
それはあなたのコードではまったく有用な役割を果たさなかっただけです。
所属していません StackOverflow