2010-08-29 31 views
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結構中受益。

回答

5

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的調用,它們在代碼中根本沒有任何有用的作用。