Кортеж кортежей в один кортеж или список
Как сделать из кортежа кортежей один кортеж или список?
Пробую так, но выдаёт ошибку:
x = (1.42, (1.5, 241.2), (52.2, 15.1), 52.1)
import itertools
print(tuple(itertools.chain.from_iterable(x)))
'float' object is not iterable
Потому что есть не только кортежи, но и простые числа с плавающей точкой. Как сделать в таком случае?
Ответы (4 шт):
Автор решения: Zhihar
→ Ссылка
способ 1:
import numpy
x = (1.42, (1.5, 241.2), (52.2, 15.1), 52.1)
res = numpy.hstack(x).tolist()
print(res)
способ 2:
x = (1.42, (1.5, 241.2), (52.2, 15.1), 52.1)
res = []
for item in x:
res += item if isinstance(item, tuple) else [item]
print(res)
Автор решения: Danis
→ Ссылка
Можно реализовать свой функцию
def f(tuple_):
res = []
for i in tuple_:
if isinstance(i, tuple):
res += f(i)
else:
res.append(i)
return res
Автор решения: Михаил Муругов
→ Ссылка
from collections.abc import Iterable
def unpack(iterable: Iterable): # Генератор
for element in iterable: # Перебираем все элементы коллекции
if isinstance(element, Iterable): # Если элемент является итерируемым
yield from unpack(element) # Распаковываем и его
else:
yield element # Иначе возвращаем сам элемент
x = (1.42, (1.5, 241.2), (52.2, 15.1), 52.1)
unpacked = tuple(unpack(x)) # Приводим генератор к кортежу
print(unpacked)
Автор решения: vadim vaduxa
→ Ссылка
def unpack(x):
for a in x:
try: yield from a
except TypeError: yield a
print(list(unpack(x)))