Python:以指定格式打印列表列表

时间:2012-10-15 12:28:44

标签: python list python-2.7

我有一个列表l = [['a','b', 'c'], 'd','e', ['f', 'g']]。列表元素并不总是必须是字母表。

现在,我使用了以下代码:

>>> index =1
>>> for i in l:
...     if isinstance(i, list):
...             for j in i :
...                     print index, j
...                     index = index + 1
...     else:
...             print index, i
...             index = index + 1
... 
1 a
2 b
3 c
4 d
5 e
6 f
7 g

您可以看到我打印出结果的格式。

另一个例子:

l = [['aaa','bbb','xxx'], 'ddd']

Output = 

1 aaa
2 bbb
3 xxx
4 ddd

我的问题是有更好的方法在python中执行此操作或任何built-in函数。

PS:列表只有1级嵌套。因此,[ [a, [b,c] ], d, e ]不可能。

2 个答案:

答案 0 :(得分:7)

您可以使用itertools.chain.from_iterable()enumerate()轻松完成此操作:

>>> import itertools
>>> l = [['a','b', 'c'], 'd','e', ['f', 'g']]
>>> for index, value in enumerate(itertools.chain.from_iterable(l), 1):
...     print(index, value)
... 
1 a
2 b
3 c
4 d
5 e
6 f
7 g

编辑:正如mgilson指出的那样,这对于多字符字符串作为顶层元素并不适用。我认为最好的解决方案就是在他的回答中使用生成器,但是,我认为字符串是特殊情况,而不是列表,所以我会颠倒逻辑:

def flatten(seq):
    for item in seq:
        if not isinstance(item, str): #Use `basestring` in 2.x
            yield from item
            #For Python <3.3
            #for subitem in item:
            #    yield subitem
        else:
            yield item

答案 1 :(得分:6)

我会创建一个生成器来压缩列表:

def flatten(lst):
   for i in lst:
       if(isinstance(i,list)):
          for x in i:
              yield x
       else:
           yield x

然后我会使用enumerate进行打印:

for idx,item in enumerate(flatten(lst),1):
    print idx,item