Python,如何创建与随机iterable类型相同的iterable
我正在尝试创建一个函数,它将一个嵌套的组合展平,并在一个与输入类型相同的iterable中传递它。例如:Python,如何创建与随机iterable类型相同的iterable,python,types,iterable,flatten,Python,Types,Iterable,Flatten,我正在尝试创建一个函数,它将一个嵌套的组合展平,并在一个与输入类型相同的iterable中传递它。例如: >>> # tuple with list, tuple and set >>> flatten_iterable([[1,2,3],(1,2,3),{1,2,3}]) [1, 2, 3, 1, 2, 3, 1, 2, 3] >>> # set with tuples >>> flatten_iterable({
>>> # tuple with list, tuple and set
>>> flatten_iterable([[1,2,3],(1,2,3),{1,2,3}])
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> # set with tuples
>>> flatten_iterable({(1,2,3),(3,4,5),(5,6,7,8)})
{1, 2, 3, 4, 5, 6, 7, 8}
>>> # tuple with list, set, tuple
>>> flatten_iterable(([1,2,3],{3,4,5},(5,6,7,8)))
(1, 2, 3, 3, 4, 5, 5, 6, 7, 8)

到目前为止,我有以下代码:
def flatten_iterable(a_list):
new_list = []
import collections
for i in a_list:
if isinstance(i, collections.Iterable):
new_list.extend(flatten_iterable(i))
else:
new_list.append(i)
return new_list
但我只是不知道如何才能使新列表
具有与输入相同的类型
def _flatten_helper(iterable):
for item in iterable:
if isinstance(item, Iterable):
yield from _flatten_helper(item)
else:
yield item
def flatten_iterable(iterable):
return type(iterable)(_flatten_helper(iterable))
flatten_iterable([[1,2,3],(1,2,3),{1,2,3}])
# [1, 2, 3, 1, 2, 3, 1, 2, 3]
这适用于接受iterable作为参数的输入iterable。我们得到输入iterable的类型,然后用平坦iterable的生成器调用它。(更确切地说,我认为这只适用于集合s)这一个应该可以:
def flatten_iterable(a_list):
return type(a_list)([i for sub in a_list for i in sub])
如果输入是另一个iterable,例如生成值的函数,该怎么办?如果那样的话,你会退还什么?