在Python中列出嵌套列表中的项
可能重复:在Python中列出嵌套列表中的项,python,list,recursion,Python,List,Recursion,可能重复: 我想要一个解决方案来列出/打印嵌套列表中的所有项目(具有任意嵌套级别)。以下是我的想法: items = [] def getitems(mylist): for item in mylist: if type(item) is list: getitems(item) else: items.append(item) return items 样本输出: foo=['foo','ba
我想要一个解决方案来列出/打印嵌套列表中的所有项目(具有任意嵌套级别)。以下是我的想法:
items = []
def getitems(mylist):
for item in mylist:
if type(item) is list:
getitems(item)
else:
items.append(item)
return items
样本输出:
foo=['foo','bar',['foo','bar','baz'],'spam',['ham','eggs','salami']]
In [8]: getitems(foo)
Out[8]:
['foo',
'bar',
'foo',
'bar',
'foo',
'bar',
'baz',
'spam',
'ham',
'eggs',
'salami']
这是一个好的解决方案吗?或者有更好的方法吗?这可能有点迂腐,但您可以将累加器列表作为可选参数传递。这样,您就不会有任何全局变量处于循环状态,避免了在两次调用函数时可能出现的问题,并且在第一次调用后忘记清除它:
def getitems(mylist, acc = None):
if acc is None: acc = []
for item in mylist:
if type(item) is list:
getitems(item, acc)
else:
acc.append(item)
return acc
我想你应该把它贴在上面。否则,它对我来说看起来不错。看起来不错,您可以将
类型(项目)is list
更改为isinstance(项目,列表)
。还请注意,递归深度限制默认为1000。感谢iInstance提示!在Python中,决不能将空列表(或任何其他可变对象)作为default参数放入函数中。这是该语言最大的缺陷之一。请使用def getitems(mylist,acc=None):
并在正文中如果acc为None:acc=[]
。谢谢您指出这一点。我更新了我的答案。你能解释一下为什么使用可变数据作为默认参数是个坏主意吗?问题是,在定义函数时,默认参数只需计算一次。对默认参数所做的任何更改都将保留在对函数的后续调用中。谢谢!我发现他对这个问题进行了详细的讨论。