2016-09-06 88 views
2

我列出这个清单:转换列表列表变为表

tableData = [['apples', 'oranges', 'cherries', 'banana'], 
      ['Alice', 'Bob', 'Carol', 'David'], 
      ['dogs', 'cats', 'moose', 'goose']] 

,我要改造成这个表:

apples  Alice dogs 
oranges  Bob cats 
cherries Carol moose 
banana  David goose 

我的诀窍,就是有“线“被转换成列(即苹果,橙子,樱桃,下同一列香蕉)

我曾尝试不同的选项(A):

for row in tableData: 
     output = [row[0].ljust(20)] 
      for col in row[1:]: 
      output.append(col.rjust(10)) 
      print(' '.join(output)) 

选项(B):

方法2

for i in tableData: 
    print(i[0].ljust(10)+(str(i[1].ljust(15)))+(str(i[2].ljust(15)))+ 
    (str(i[3].ljust(15))))  

没有一个似乎解决这个问题。
在此先感谢您的任何建议。

+0

要说清楚的是,这是Py2还是Py3? 'print'不同于另一个,并且您的示例代码使用它的方式没有行使任何差异来说明问题。 – ShadowRanger

+0

另请参见:[Python:打印列表为表格数据](http://stackoverflow.com/q/9535954/216074) – poke

+0

这是python 3.5 –

回答

1

“翻转” 最简单的方法嵌套列表是使用zip

for fruit, name, animal in zip(*tableData): 
    print(fruit.ljust(10), name.ljust(10), animal.ljust(10)) 

此打印:

apples  Alice  dogs 
oranges Bob  cats 
cherries Carol  moose 
banana  David  goose 
+0

令人惊叹的!!!谢谢 –

0

已经有这个内置函数:zip

zip(* [['apples', 'oranges', 'cherries', 'banana'], 
     ['Alice', 'Bob', 'Carol', 'David'], 
     ['dogs', 'cats', 'moose', 'goose']]) 
5

要转置表格,请使用zip-and-splat技巧。

要左或右对齐细胞,使用format spec language

>>> for row in zip(*tableData): 
...  print '{:<10}{:>7} {:<10}'.format(*row) 
...  
apples  Alice dogs  
oranges  Bob cats  
cherries Carol moose  
banana  David goose 
+0

最终条目不需要明确的字段宽度,因为它是左对齐的,并且如果宽度超过宽度就会溢出。否则,是的,最好的答案。 – ShadowRanger

+0

谢谢。这些#代表的究竟是什么 –

+1

您是否关注链接?数字是为内容保留的空间,因此左对齐或右对齐知道必须在左侧或右侧添加多少间隔。 – Matthias

1

一个也玩弄pandas.DataFrame

In [22]: import pandas as pd 
In [22]: pd.DataFrame(tableData).T # .T means transpose the dataframe 
Out[22]: 
      0  1  2 
0 apples Alice dogs 
1 oranges Bob cats 
2 cherries Carol moose 
3 banana David goose 

人删除这些烦人号将列和索引设置为空白:

In [27]: l1, l2 = len(tableData), len(tableData[0]) 

In [28]: pd.DataFrame(tableData, index=['']*l1, columns=['']*l2).T 
Out[28]: 

    apples Alice dogs 
    oranges Bob cats 
    cherries Carol moose 
    banana David goose 
+0

不是downvoting,但我认为匆忙'pandas'为一个简单的问题可能会过度,只是一点点。 :-) – ShadowRanger

+0

@ShadowRanger我确实考虑过这个问题,但我认为这是一个值得考虑问题的工具(如果不是现在,从长远来看):) –