Python 格式化嵌套列表/元组

Python 格式化嵌套列表/元组,python,formatting,Python,Formatting,我有一个很长的输出!从某个函数中,可以看到: [[(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.527975279416402

我有一个很长的输出!从某个函数中,可以看到:

[[(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
我不喜欢输出的结构,但是在返回它的函数中使用它非常方便

但我需要将输出格式化为这样:

[[(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文件,所以我现在不使用打印,而是选择使用列表并附加字母,因为这对我来说更清楚

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
.
.
.
为什么我会得到如此奇怪的格式,而不是打印?这让我非常震惊……

完整的程序:

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
这是用Python2.5、2.6、2.7和3.2检查的


实现将字母添加到列表中。需要列表构造函数,因为元组是常量且不能更改。

在调用wee函数的映射调用中替换对str的调用:

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))

如果它总是长度为3,那么您应该查看itertools模块。比如:

import itertools
for num, letter in itertools.izip(itertools.chain.from_iterable(bigList), itertools.cycle('ABC')):
    print '%f\t%s' % (num, letter)

另外,我希望您没有在rangelenresults[0]::中实际使用for z,因为这将重新运行results函数,重新计算整个列表。仅供参考。

同样有效!只是将它改为def-dougst:return'\t'。joinmapstr.lst不是更好的选择,只需执行k=*n[z],obj[z]来解压元组,这样就不需要进行嵌套联接了?如何以这种方式解压元组?我认为解压只在函数调用的上下文中有效。哇,这个想法对我来说是新的,谢谢!这将是长度3,但我想留下一个机会,轻松地改变长度,以不同的东西。谢谢你的提示,顺便说一句,我没想过!以前,它运行了超过3秒,现在-不到一秒!我刚刚开始编程…哦,itertools函数的好处是,您可以轻松地将它们用于生成器函数或对象。如果你的大名单真的很庞大,你可能想看看。是的,如果你在寻找速度,itertools的东西是很好的。如果您想允许不同的长度,可以将其包装在函数中,并将标签用作参数:def fbigList,labels:然后使用labels对象,而不是我上面提到的“ABC”。传递的标签对象的长度将控制循环的长度以及字符。所以fbigList,“ABC”表示您以前是如何使用它的,或者fbigList,“wxyz”表示具有不同字符的4个子列表。希望能有所帮助。我认为大列表中嵌套列表的长度应该是~1000或更多。我会调查的,谢谢!一个意想不到的问题。。。我真的想将输出写入一个.csv文件,所以我使用writer.writerows来代替打印。。。。实际上我没有正常工作,我只得到这个:0。0 1 . 0 2 . 0 A为什么我会得到如此奇怪的格式,而不是打印的格式?这让我非常震惊…您只需将“\t”替换为“,”。这不起作用。。。我得到这个:0。0 , 1 . 0 , 2 . 0,一列中的A我已更新源:请重新检查;它应该可以工作。我是否正确理解,您刚刚将“\t”更改为“,”?如果是这样,它就不起作用了。。。