2014-11-14 74 views
0

我有两个阵列,例如,第一可以是:一些问题,在python解析阵列

self.history = [[1, 15, 12, 51], [15, 5, 12, 4]] 

和第二:

date = ["10.11.2014", "11.11.2014", "12.11.2014", "13.11.2014"] 

我需要输出下述类型格式的:

""10.11.2014,1,15\n" + "11.11.2014,15,5\n" + "12.11.2014,12,12\n" + "13.11.2014,51,4\n"" 

我已经实现了这个结果一次,但重启后它不再工作了。

下面是相关的代码片段:

 zips = zip(*self.history) 
     zips2 = zip(date_arr, zips) 
     print zips2 
     zips = ['"{},{}\\n" + '.format(a, ','.join(b)) for a, b in zips2] 
     for i in zips: 
       returning = returning + i 
     print returning 
     self.history = returning 
     return self.history 

返回以下错误(在Django): “序列项0:预计字符串,整数发现”。 什么是导致错误?

+1

[ “{},{}” 格式(d “” 加入([STR( v)for v in h]))for d,h in zip(date,zip(* self.history)) - 你可以只加入字符串序列 – kwarunek 2014-11-14 23:57:25

+0

@kAlmAcetA,我已经删除了我的帖子(因为你的是pythonic更多),请考虑mak它成为一个答案。 – 2014-11-14 23:59:31

回答

4
"\n".join(','.join(str(i) for i in x) for x in zip(date, *history)) 
+0

+1:迄今为止最好的列表,因为它在2个以上的参数上正确使用了'zip'的功能,并且也是最易读的。 – 2014-11-15 00:09:33

+0

如果您使用Python 2.X,请使用itertools模块中的izip。 – mdadm 2014-11-15 03:13:42

1

问题出在这个部分join(b) for a, b in zips2。加入(b)失败,因为b是int s的列表。在致电join之前,您需要将此列表int s转换为string s的列表。

将其更改为: join((str(i) for i in b)) for a,b in zips2它应该工作。

这里是我的回答:。

history = [[1, 15, 12, 51], [15, 5, 12, 4]] 
date = ["10.11.2014", "11.11.2014", "12.11.2014", "13.11.2014"] 
result = [] 
for k, v in zip(date, zip(*history)): 
    result.append('%s,%s\n' % (k, ','.join([str(a) for a in v]))) 

print result 
0
>>> [ ",".join(map(str,x))+'\n' for x in zip(date,*history) ] 
['10.11.2014,1,15\n', '11.11.2014,15,5\n', '12.11.2014,12,12\n', '13.11.2014,51,4\n'] 

>>> " + ".join([ "\""+",".join(map(str,x))+"\n\"" for x in zip(date,*history) ]) 
'"10.11.2014,1,15\n" + "11.11.2014,15,5\n" + "12.11.2014,12,12\n" + "13.11.2014,51,4\n"' 
+0

看看它的格式 – Hackaholic 2014-11-15 00:29:17