Как мне получить предварительно распакованный список? - PullRequest
1 голос
/ 29 августа 2010

У меня есть список, созданный в рамках операции 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.

Ответы [ 2 ]

5 голосов
/ 29 августа 2010

yield (key,) + tuple(subset_of_grp)

2 голосов
/ 29 августа 2010
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, которые просто не сыграли никакой роли в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...