我试着制作平面清单。现在我有清单:
L=['aa',['bb','cc']]
我试试:
L=['aa',['bb','cc']]
new=[]
for i in L:
print i
new+=i
print new
我得到了:
'aa'
['bb','cc']
['a','a','bb','cc']
为什么print i=0 = 'aa'
和new+=i i=0
只有'a'?
我如何获得列表['aa','bb','cc']
?
答案 0 :(得分:1)
一般来说,当您不知道原始列表的深度时,这应该有效:
L=['aa',['bb','cc', ['dd', 'ee']], 'ff']
new = []
for l_item in L:
stack = [ l_item ]
while stack:
s_item = stack.pop(0)
if isinstance(s_item, list):
stack += [ x for x in s_item ]
else:
new.append(s_item)
print new
这给出了:
['aa', 'bb', 'cc', 'dd', 'ee', 'ff']
答案 1 :(得分:1)
好吧,不要忘记字符串在Python中是可迭代的。
>>> new = []
>>> new += 'aa'
>>> print new
['a', 'a']
为了确保添加你想要的东西,你可以这样做:
>>> L = ['aa',['bb','cc']]
>>> new = []
>>> for e in L:
... new.extend(e if type(e) == list else (e,))
>>> print new
['aa', 'bb', 'cc']
严重的是,
P.S。您可以查看this post ...以获取更多信息。
答案 2 :(得分:0)
这是因为你迭代'aa'
,基本上把它视为['a', 'a']
。
如果您想避免迭代字符串,可以查看类型:
for i in L:
if isinstance(i, list):
new += i
else:
new.append(i)
有关详细信息以及如何递归执行此操作,请参阅此问题: