PYTHON-将列表中的单个元素与子列表合并

时间:2014-08-20 08:33:13

标签: 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 i=0只有'a'?

我如何获得列表['aa','bb','cc']

3 个答案:

答案 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)

有关详细信息以及如何递归执行此操作,请参阅此问题:

Flatten (an irregular) list of lists