2012-03-07 50 views
0

我知道"".join(list)将列表转换为字符串,但如果该列表包含嵌套列表会怎么样?当我尝试它时,由于意外的列表类型而返回TypeError。我猜测错误处理是可能的,但到目前为止,我的尝试都没有结果。“”.join(list)如果列表在python中包含嵌套列表?

+0

http://stackoverflow.com/questions/716477/join-list-of-lists-in-python – 2012-03-07 18:46:53

+0

@MДΓΓБДLL这么多的代表,也没有dup投票?今天已经没有投票权了? – phihag 2012-03-07 18:48:18

+0

该命令用于连接字符串。如果列表中的对象不是字符串(例如列表,在您的示例中),您将不得不尝试将它们转换为字符串,如下面首先建议的那样。 – mohit6up 2012-03-07 18:54:31

回答

4

好吧,如果列表嵌套,只需flatten事前:

>>> import itertools 
>>> lst = [['a', 'b'], ['c', 'd']] 
>>> ''.join(itertools.chain(*lst)) 
'abcd' 
4

你可以尝试这样的事:

''.join(''.join(inner) for inner in outer) 

这应该工作,不会有太多的麻烦如果外部列表包含其中的字符串和列表,''.join(myString) -> myString

0

你也可以试试这个片断:

from collections import Iterable 

ellipsis = type('',(),{'__str__' : lambda self:'...'})() 

def flatten(collection,stack = None): 
    if not stack: stack = set() 
    if id(collection) in stack: 
     yield ellipsis 
     return 
    for item in collection: 
     if isinstance(item,Iterable): 
      stack.add(id(collection)) 
      for subitem in flatten(item,stack): 
       yield subitem 
      stack.remove(id(collection)) 
     else: yield item 

x = [1,2,[3,4,[5],[[6]],7]] 
x.append(x) 

>>> print(', '.join(map(str,flatten(x)))) 
1, 2, 3, 4, 5, 6, 7, ...