2016-04-27 58 views
0

我有以下程序使用我从网上复制的双端机。在Python中对齐stdout打印

from collections import Counter,deque 
import re 
import time 
import my_ds 

num = 100000 

def append(c): 
    for i in range(num): 
     c.append(i) 

def appendleft(c): 
    if isinstance(c, deque): 
     for i in range(num): 
      c.appendleft(i) 
    else: 
     for i in range(num): 
      c.insert(0,i) 

def pop(c): 
    for i in range(num): 
     c.pop() 

def popleft(c): 
    if isinstance(c,deque): 
     for i in range(num): 
      c.popleft() 
    else: 
     for i in range(num): 
      c.pop(0) 


for container in [deque, list]: 
    for operation in [append, appendleft, pop, popleft]: 
     c = container(range(num)) 
     start = time.time() 
     operation(c) 
     elapsed = time.time() - start 
     print('Completed {0}/{1}  in {2} seconds: {3} ops/sec'.format(container.__name__,operation.__name__, elapsed, num/elapsed)) 

输出如下所示。

Completed deque/append  in 0.011004447937011719 seconds: 9087234.595718866 ops/sec 
Completed deque/appendleft  in 0.00800323486328125 seconds: 12494947.56911344 ops/sec 
Completed deque/pop  in 0.00800323486328125 seconds: 12494947.56911344 ops/sec 
Completed deque/popleft  in 0.009003400802612305 seconds: 11106914.175250906 ops/sec 
Completed list/append  in 0.011004447937011719 seconds: 9087234.595718866 ops/sec 
Completed list/appendleft  in 8.727489709854126 seconds: 11458.048456601553 ops/sec 
Completed list/pop  in 0.01900768280029297 seconds: 5261030.555416185 ops/sec 
Completed list/popleft  in 1.781712532043457 seconds: 56125.776858800775 ops/sec 

我要寻找一个很好的方式排列的数字secondsops/second。怎么是这样的蟒蛇

回答

2

如果你需要它不仅仅是这一个多的地方,你也可以使用tabulate模块,这将很好地格式化你的,不需要猜测长度前期。

+0

我试过这种方法。但我得到一个错误 - “类型错误:'浮动'对象不可迭代。 – liv2hak

+0

@ liv2hak你必须发布你正在使用的实际代码。 – viraptor

+0

谢谢:)请参阅http://stackoverflow.com/questions/36878944/tabulate-package-typeerror-float-object-is-not-iterable – liv2hak

0

您可以使用做了<和>格式()字符串方法的比对运营商。看看这里的文档:

https://docs.python.org/3.5/library/string.html#format-string-syntax

例如:

>>> a='deque' 
>>> b='append' 
>>> c=0.0001023
>>> d=0.1242344213 
>>> print('Completed {0}/{1}  in {2:<15} seconds: {3:<15} ops/sec'.format(a, b, c, d)) 
Completed deque/append  in 0.0001023seconds: 0.1242344213 ops/sec 
+0

这不会用于对齐几行 – Hamms

1

您需要对齐Completed deque/append部分以及用于列的其余部分保持一致。试试这个:

print('Completed {0}/{1:<11} in {2:<20} seconds: {3:<18} ops/sec'.format(container.__name__,operation.__name__, elapsed, num/elapsed)) 

Completed deque/append  in 0.009192228317260742 seconds: 10878755.025288548 ops/sec 
Completed deque/appendleft in 0.008057117462158203 seconds: 12411386.636681067 ops/sec 
Completed deque/pop   in 0.009001970291137695 seconds: 11108679.18531663 ops/sec 
Completed deque/popleft  in 0.008355855941772461 seconds: 11967654.863469055 ops/sec 
Completed list/append  in 0.009819984436035156 seconds: 10183315.528794795 ops/sec 
Completed list/appendleft in 5.856244802474976 seconds: 17075.78890106128 ops/sec 
Completed list/pop   in 0.012813091278076172 seconds: 7804517.8817312345 ops/sec 
Completed list/popleft  in 1.437035083770752 seconds: 69587.72345181856 ops/sec