enumerate用法和转置矩阵求解、效率测试

enumerate用法和转置矩阵求解、效率测试

枚举函数:
enumerate(iterable[, start]) – > iterator for index, value of iterable
返回一个可迭代对象,将原有可迭代对象的元素和从start开始的数字配对。

练习题:

clipboard

解答:
#方法1,列表扫描追加法
import datetime
matrix = [[1,2,3], [4,5,6]]
tm = []
count = 0
for row in matrix:
for i,col in enumerate(row):
if len(tm) < i + 1: # row有m列,tm就要就要有m行
tm.append([])
tm[i].append(col)
count += 1
print(matrix)
print(tm)
print(count)

#方法2,直接开辟目标空间,矩阵元素交换法(避免引用类型)
matrix = [[1,2,3], [4,5,6]]
tm = [[0 for col in range(len(matrix))] for row in range(len(matrix[0]))]
count = 0
# tm = []
# for row in range(len(matrix[0])):
# tm.append([])
# for col in range(len(matrix)):
# tm[row].append(0)
for i,row in enumerate(tm):
for j,col in enumerate(row):
tm[i][j] = matrix[j][i] #matrix元素搬到tm
count += 1
print(matrix)
print(tm)
print(count)

效率测试:
datetime 或者 %%timeit(Ipython中)

import datetime
matrix = [[1,2,3], [4,5,6], [7,8,9]]
start = datetime.datetime.now()
for c in range(100000):
tm = [] #目标矩阵
for row in matrix:
for i, item in enumerate(row):
if len(tm) < i + 1:
tm.append([])
tm[i].append(item)
delta = (datetime.datetime.now() – start).total_seconds()
print(delta)
print(matrix)
print(tm)

start = datetime.datetime.now()
for c in range(100000):
tm = [0]* len(matrix[0])
for i in range(len(tm)):
tm[i] = [0] * len(matrix)
for i, row in enumerate(tm):
for j, col in enumerate(row):
tm[i][j] = matrix[j][i]
delta = (datetime.datetime.now() – start).total_seconds()
print(delta)
print(matrix)
print(tm)

matrix = [[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6],[1,2,3], [4,5,6], [1,2,3], [4, 5, 6]]

clipboard2

4*4开始,先开辟空间效率更高啦!

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95539

(0)
JacoJaco
上一篇 2018-04-08 21:08
下一篇 2018-04-08 21:20

相关推荐

  • Python高阶函数及装饰器

    First Class Object 函数在Python中是一等公民 函数也是对象,可调用的对象 函数可作为普通变量、参数、返回值等 高阶函数 数学定义:y=g(f(x)) 高阶函数需满足的条件,至少其一 接受一个或多个函数作为参数 输出一个函数 内建函数的高阶函数 排序:sorted(iterable[,key][,reverse]) 返回一个新列表,对一…

    2018-04-22
  • Python 部分知识点总结(二)

    此篇博客只是记录第四周未掌握或不熟悉的知识点,用来加深印象。

    Python笔记 2018-03-30
  • 正则表达式

    正则表达式

    Python笔记 2018-05-03
  • 解析式

    列表解析式和字典解析式 datetime模块 对日期,时间,时间戳的处理 datetime类 today()返回本地时区当前的datetime对象 now(tz=None)返回当前时间的datetime对象,时间到微秒,如果tz为None,返回和today()一样 utcnow()没有时区的当前时间 fromtimestamp(timestamp,tz=Zo…

    2018-04-09
  • Python 的描述器Descriptors

    Python 的描述器Descriptors

    Python笔记 2018-05-29
  • Python函数

    函数 数学函数 Python函数 若干语句块、函数名称、参数列表构成,组织代码的最小单元 完成一定的功能 作用 结构化编程对代码的最基本的封装,一般按照功能组织一段代码 复用,减少冗余代码 简洁美观,可读易懂 函数分类 内建函数,max()、reversed() 库函数,math.ceil() 函数定义、调用 def语句定义函数 def 函数名(参数列表):…

    2018-04-16