我有一个函数的输出(一个很长的!),它看起来像这样:
[[(0.0, 1.0, 2.0), (1.0, 2.0, 0.0), (2.0, 1.0, 0.0)], [(1.6324986294474886e-06, 1.000000272083105, 1.9999992744450537), (1.0, 1.9999985559929883, 9.626713411705526e-07), (1.9999957124111243, 1.000000714598146, 9.527975279416402e-07)], ......................, [(0.00016488526381860965, 1.0000274825531668, 1.9999267116402146), (0.9999999810184469, 1.9998541492231847, 9.723903843230245e-05), (1.9995669148822666, 1.000072183688789, 9.62532545797885e-05)]]
我不喜欢输出的结构,但在函数中使用它非常方便,它返回它。
但我需要将输出格式化为这样:
0.0 1.0 2.0 A
1.0 2.0 0.0 B
2.0 1.0 0.0 C
1.6324986294474886e-06 1.000000272083105 1.9999992744450537 A
1.0 1.9999985559929883 9.626713411705526e-07 B
1.9999957124111243 1.000000714598146 9.527975279416402e-07 C
我有这段代码:
obj = 'A', 'B', 'C'
for n in results():
for z in range(len(results()[0])):
k = n[z], obj[z]
print '\t'.join(map(str, k))
('results'是函数的名称,返回大列表)
它给了我这个:
(0.0, 1.0, 2.0) A
(1.0, 2.0, 0.0) B
(2.0, 1.0, 0.0) C
(1.6324986294474886e-06, 1.000000272083105, 1.9999992744450537) A
(1.0, 1.9999985559929883, 9.626713411705526e-07) B
(1.9999957124111243, 1.000000714598146, 9.527975279416402e-07) C
如果我不在这行的末尾添加字母(A,B或C),我可以得到这个,所以,我想,也许以不同的方式添加它?
无论如何,希望得到你的帮助! 提前谢谢!
一个意想不到的问题......我真的想把输出写成.csv文件,所以我没有使用打印(现在我选择使用list并附加字母,因为它更清晰对我来说)
with open('table.csv', 'wb') as f:
writer = csv.writer(f)
for n in results():
for z in range(len(res[0])):
k = list(n[z])
k.append(obj[z])
writer.writerows ('\t'.join(map(str, k)))
它实际上没有正常工作,我只能得到这个:
0
.
0
1
.
0
2
.
0
A
.
.
.
为什么我会得到如此奇怪的格式,但不是我用打印得到的?这让我很震惊......
答案 0 :(得分:5)
如果它总是长度为3,你应该查看itertools
模块。类似的东西:
import itertools
for num, letter in itertools.izip(itertools.chain.from_iterable(bigList), itertools.cycle('ABC')):
print '%f\t%s' % (num, letter)
另外,我希望你实际上没有使用for z in range(len(results()[0])):
,因为这将重新运行结果函数,重新计算整个列表。仅供参考。
答案 1 :(得分:1)
完整的计划:
def results():
return [[(0.0, 1.0, 2.0), (1.0, 2.0, 0.0), (2.0, 1.0, 0.0)],
[(1.6324986294474886e-06, 1.000000272083105, 1.9999992744450537),
(1.0, 1.9999985559929883, 9.626713411705526e-07),
(1.9999957124111243, 1.000000714598146, 9.527975279416402e-07)],
[(0.00016488526381860965, 1.0000274825531668, 1.9999267116402146),
(0.9999999810184469, 1.9998541492231847, 9.723903843230245e-05),
(1.9995669148822666, 1.000072183688789, 9.62532545797885e-05)]]
obj = 'A', 'B', 'C'
for n in results():
for z in range(len(results()[0])):
k = list(n[z])
k.append(obj[z])
print(','.join(map(str, k)))
输出:
0.0,1.0,2.0,A
1.0,2.0,0.0,B
2.0,1.0,0.0,C
1.63249862945e-06,1.00000027208,1.99999927445,A
1.0,1.99999855599,9.62671341171e-07,B
1.99999571241,1.0000007146,9.52797527942e-07,C
0.000164885263819,1.00002748255,1.99992671164,A
0.999999981018,1.99985414922,9.72390384323e-05,B
1.99956691488,1.00007218369,9.62532545798e-05,C
使用python 2.5,2.6,2.7和3.2检查。
该实现将该字母添加到列表中。 (需要列表构造函数,因为元组是常量且无法更改。)
答案 2 :(得分:1)
将地图调用中的str调用替换为调用wee函数:
def foo(lst):
return ' '.join(map(str,lst))
obj = 'A', 'B', 'C'
for n in results():
for z in range(len(results()[0])):
k = n[z], obj[z]
print '\t'.join(map(foo, k))