2016-04-27 6 views
0

私は、Webからコピーした両端キューを使用する次のプログラムを持っています。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 

私はあなたが形式の<と>アライメント演算子()文字列のメソッドを使用することができます.Howこのpythonで

答えて

2

+0

この方法を試しました。しかし、私はエラーが発生しています - '型エラー: 'float'オブジェクトは反復可能ではありません。 – liv2hak

+0

@ liv2hakあなたが使用している実際のコードを投稿する必要があります。 – viraptor

+0

ありがとう:) http://stackoverflow.com/questions/36878944/tabulate-package-typeerror-float-object-is-not-iterableをご覧ください。 – liv2hak

0

を行われている数字secondsops/secondを揃えるための良い方法を探しています。ここでのドキュメントを見てください:たとえば

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

:あなたが整列する列の残りのためにもCompleted deque/append一部を合わせる必要があり

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

。これを試してください:あなたはこの1つだけより多くの場所でそれを必要とする場合は、あなたもあなたのためにうまくそれをフォーマットし、先行の長さを推測する必要はありませんtabulateモジュールを使用することができます

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 
関連する問題