【发布时间】:2019-05-29 02:36:14
【问题描述】:
我想创建一个函数来展平所有可能的可迭代的基因组合,并以与输入相同的类型返回结果。
到目前为止,我创建了以下函数。但它不像我想要的那样工作。例如:
flatten_iterable(([1, 2, 3], {4, 5, 6}, (7, 8, 9)))
给出以下结果:
(1, 2, 3, {4, 5, 6}, 7, 8, 9)
如您所见,该集合仍然存在
当输入是一个集合时,我得到以下错误:
TypeError: unhashable type: 'list'
def flatten_iterable(something):
new_list = []
x = type(something)
if isinstance(something, (list, tuple)):
for a in something:
new_list.extend(flatten_list(a))
else:
new_list.append(a_list)
new_list2 = x(new_list)
return new_list2
有谁知道如何解决这个问题?
【问题讨论】:
-
问题是当输入是一个集合时,您将一个集合附加到
new_list,然后您尝试再次将该列表转换为一个集合,但这不起作用,因为它包含一个集是不可散列的。您应该立即归还该套装(即使用else: return something)。 -
展平应该多深?
-
实际上,鉴于 Python 对“可迭代”的定义,您所要求的(我的意思是“返回与输入相同类型的结果”部分)是完全不可能的。
标签: python python-3.x function types