python项目开发案例集锦怎么样-Python花式编程案例集锦(5)

defdemo1(x, y, z):

product = -float('inf')

positions = ()

fori, v1 inenumerate(x):

forj, v2 inenumerate(y):

fork, v3 inenumerate(z):

t = v1*v2*v3

ift > product:

product = t

positions = (i, j, k)

return(product, positions)

仔细看上面的代码,虽然是Python的语法,但是整个代码散发着浓浓的C语言气息,换汤不换药啊。

74de1d75de01401f8203d5a07119fd9c.jpeg

仔细分析题意,大概可以知道,因为是乘法运算,所以从每个列表中选择最大数再相乘,应该也是符合题意的,于是编写代码如下:

# 利用Python内置函数和列表对象方法

defdemo2(x, y, z):

i = max(x)

iPos = x.index(i)

j = max(y)

jPos = y.index(j)

k = max(z)

kPos = z.index(k)

return(i*j*k, (iPos, jPos, kPos))

但是,上面的代码看上去还是很笨啊,傻傻的样子,并且和第一段代码一样不灵活,难道就没有更好的办法吗?

# 利用Python函数式编程特点

defdemo3(lst):

maxValues = tuple(map(max, lst))

f =lambdalst, item: lst.index(item)

positions = tuple(map(f, lst, maxValues))

product = eval('*'.join(map(str, maxValues)))

return(product, positions)

上面的代码减少了很多限制,比如可以处理3个以上的列表,对客户的需求改动不敏感。

28a039eb3ad146a7b41a4d51cb66e215.jpeg

那么,上面的几段代码是否等价呢,让我们用测试代码来说话,直接测试一亿次吧。注意第三个函数的调用方式与前两个略有区别。

921b9b65a651413fa588eff0420c7518.jpeg

# 测试代码,运行一亿次

fori inrange(10**8):

m = randrange(1, 30)

n = 3

x, y, z = getData(m, n)

if not(demo1(x,y,z) == demo2(x,y,z) == demo3((x,y,z))):

print(x,y,z)

把上面的代码整合到一起运行一下,没有任何输出,说明三个函数功能等价。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值