Правильное использование itertools в python 3

1

Я пытаюсь расширить следующий список
[(1, [('a', '12'), ('b', '64'), ('c', '36'), ('d', '48')]), (2, [('a', '13'), ('b', '26'), ('c', '39'), ('d', '52')])]

в

[(1,a,12),(1,b,24),(1,c,36),(1,d,48),(2,a,13),(2,b,26),(2,c,39),(2,d,52)]

Я использовал zip (itertools.cycle()) в python 3, но вместо этого получил ссылку на zip-объект. Есть ли другой способ, которым я могу это сделать? Это сработало для python 2

  • 5
    zip (и map) в python3 возвращает генератор. использовать list(zip(...)) должен исправить это
  • 1
    Я бы просто сделал [(n,) + tup for n, tuples in thing for tup in tuples] .
Показать ещё 3 комментария
Теги:
python-3.x

2 ответа

0
Лучший ответ

Объект zip является итерируемым. Как и другие API в Python 3, теперь он возвращает итерируемый объект (например, генератор), который лениво оценивает его ввод, а не возвращает весь результат в list.

В большинстве случаев вы можете использовать объект так же, как и раньше.

Если вам нужен список, просто вызовите list() в zip объекте:

result_list = list(zip(itertools.cycle(...)))
  • 0
    Всем спасибо. Это работает как шарм :)
0

Если объект zip создан правильно, вы можете сделать list(zip_object) или [*zip_object] чтобы получить список.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню