制表包TypeError:“浮动对象不可迭代”

liv2hak

我有以下程序使用从网络复制的双端队列。

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。如何在这pythonI做有以下程序,使用双端队列,我从网上复制。

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_list = [container.__name__,operation.__name__, elapsed, num/elapsed]
        print(tabulate(print_list, headers = ['Container , Operation , Tile elapsed , ops/sec'], floatfmt=".8f"))

我收到以下错误。

Traceback (most recent call last):
  File "C:/playpen/python/concepts/data_structures/collections.py", line 66, in <module>
    print(tabulate(print_list, headers = ['Container , Operation , Tile elapsed , ops/sec'], floatfmt=".8f"))
  File "C:\Anaconda3\lib\site-packages\tabulate.py", line 894, in tabulate
    list_of_lists, headers = _normalize_tabular_data(tabular_data, headers)
  File "C:\Anaconda3\lib\site-packages\tabulate.py", line 649, in _normalize_tabular_data
    rows = list(map(list,rows))
TypeError: 'float' object is not iterable
振子

您需要收集所有结果,然后一次性打印:

print_list = []
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_list.append([container.__name__,operation.__name__, elapsed, num/elapsed])
print(tabulate(print_list, headers = ['Container , Operation , Tile elapsed , ops/sec'], floatfmt=".8f"))

tabulate接受行列表(应该是值列表)。您的旧版本尝试迭代数字结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章