2017-08-09 170 views
0

我一直在试图让listlistlist写在python的csv的同一行上。在python中将列表和列表的列表转换为csv

d=[[1,2,3,4,5,6],[2,3,4,5,6,7]] 
timestamp = [0.1, 0.3] # Basically timestamping for each list of d 
file = open('test.csv', 'w') 
writer = csv.writer(file, delimiter=',',lineterminator='\n') 
writer.writerows(zip(d, timestamp)) 

但我正在逐渐

col1   , col2 
[1,2,3,4,5,6], 0.1 
[2,3,4,5,6,7], 0.3 

,而不是我要救我的csv如下:

col1,col2, ...,col7 
1,2,3,4,5,6, 0.1 
2,3,4,5,6,7, 0.3 

请任何可以帮助我解决这个问题?

回答

4

您可以从timestampd添加每个项目到相应的子集:

>>> [x+[y] for x, y in zip(d, timestamp)] 
[[1, 2, 3, 4, 5, 6, 0.1], [2, 3, 4, 5, 6, 7, 0.3]] 

并且代码:

... 
writer.writerows(x+[y] for x, y in zip(d, timestamp)) 

在Python 3,你可以使用扩展拆包没有必须创建内部列表:

>>> [x+y for x, *y in zip(d, timestamp)] 
[[1, 2, 3, 4, 5, 6, 0.1], [2, 3, 4, 5, 6, 7, 0.3]] 
+0

谢谢。如果我想在'1st'列中加入'timestamp',那么需要进行什么样的更改? – abhi1610

+0

您可以交换参数的顺序:'[x + y for * x,y in zip(timestamp,d)]' –

+0

谢谢。但是Python 2.7要做什么呢?因为我已经尝试过'writer.writerows([x + [y] for x,y in zip(t,d)])'仍然会产生错误,因为TypeError:不支持的操作数类型为+:'float', 'list'' – abhi1610

0

略微不同的方式来解压您的名单是:

writer.writerows((*a, b) for a, b in zip(d, timestamp)) 

这将遍历行

(1, 2, 3, 4, 5, 6, 0.1) 
(2, 3, 4, 5, 6, 7, 0.3) 

(但基本上是相同的想法在this answer