PYTHON将列表中的单个元素与子列表合并
我试着列出一个简单的清单。现在我有一份清单:PYTHON将列表中的单个元素与子列表合并,python,Python,我试着列出一个简单的清单。现在我有一份清单: 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=0中,i=0仅为'a' 我如何才能得到列表['aa','bb','cc']?发生这种情况是因为您迭代'aa',基本
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=0
中,i=0仅为'a'
我如何才能得到列表
['aa','bb','cc']
?发生这种情况是因为您迭代'aa'
,基本上将其视为['a','a']
如果要避免对字符串进行迭代,可以查看以下类型:
for i in L:
if isinstance(i, list):
new += i
else:
new.append(i)
有关更多详细信息以及如何递归执行,请参见此问题:
一般来说,这意味着当您不知道原始列表的深度时,应该可以:
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']
别忘了字符串在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']
说真的
另外,您可以查看更多信息。您需要避免对字符串进行迭代;请看我的答案,它在递归和特殊情况下使用字符串。问题是你的+=在方程的任一侧期望iterable,并用右边扩展左边,在你的例子中右边是'aa',它被视为两个元素iterable,像['a','a']