无论输入是list
,numpy.array
还是pandas.Series
,Python中的以下函数都可以返回列表。
写它的pythonic方法是什么,以使输出类型与输入类型相同?
def foo(input):
output = []
output.append(input[0])
for i in range(1, len(input)-1):
if (some condition):
output.append(input[i])
output.append(input[-1])
return output
答案 0 :(得分:1)
通常,如果不对输入是什么做很多假设,就无法做到这一点。
第一步是确保output
是正确的类型,而不是列表。
output = type(self)()
但是,这假设您输入的是什么类型,都可以通过不带参数的调用来创建实例。
接下来,您必须将自己限制在所有预期输入都支持的对output
的操作上。并非所有可迭代对象都支持append
方法(例如,set
使用add
,而不是append
),也不是所有可迭代对象都支持__getitem__
(生成器,例如)。这意味着您不能过多地泛化函数 ;您必须始终牢记您将支持的输入类型。
或者,如果要支持的一组类型可以从列表中创建实例,则可以让output = []
站立,但在返回之前将其转换:
return type(self)(output)