里面二元矩阵的初始化我直接用的list的乘法,看起来没什么问题。。初始化完是d = [[0,0,0],[0,0,0],[0,0,0]]
但是判断l[0]和l[1]不同之后,除了d[1][0]之外,d[0][0]和d[2][0]都变成了1!
*操作符在实现上是复制了值的引用,而不是创建了新的对象。所以list的三个item指向的是同一个地址!
*操作符对于不可变对象是安全的,对于可变对象要小心。
而python里list是可变对象,tuple是不可变对象。
将上述初始化声明换成以下就ok了
# -*- coding:utf-8 -*-#py3
'''
用高级函数reduce()
'''
from functools import reduce
lis=[1,2,3,4,5]
r=reduce(lambda x,y:x*y,lis)#对序列lis中元素逐项相乘lambda用法请自行度娘
print(r)
reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
比方说对一个序列求和,就可以用reduce实现,比如:
from functools import reducedef add(x,y):
return x+y
reduce(add,[1,2,3])
#结果是6
1、代码一
>>> from functools import reduce
>>> reduce(lambda x,y:x*y,[1,2,3,2,2])
24
2、代码二
lst = [1, 2, 3, 4, 5]
num = 1
for i in lst:
num *= i
print num
扩展资料:
控制语句
if语句,当条件成立时运行语句块。经常与else, elif(相当于else if) 配合使用。
for语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。
while语句,当条件为真时,循环运行语句块。
try语句,与except,finally配合使用处理在程序运行中出现的异常情况。
class语句,用于定义类型。
def语句,用于定义函数和类型的方法。
pass语句,表示此行为空,不运行任何操作。
assert语句,用于程序调试阶段时测试运行条件是否满足。
with语句,Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加密,然后在语句块运行退出后解密。
参考资料来源:百度百科-Python (计算机程序设计语言)