python求列表最小值函数_如何通过使用lambda或函数从项目中获取比较值来获取列表中的最小值/最大值?...

在Python中,我想使用lambda在列表中找到max元素进行比较.

这段代码没有成功:

# An 'anonymous' object, like JSON object. Use like: Mock(name='Bob', age=30)

class Mock(object):

def __init__(self, **kwargs):

self.__dict__.update(kwargs)

items = [

Mock(cost=10, quantity=1),

Mock(cost=15, quantity=3),

Mock(cost=20, quantity=5),

Mock(cost=100, quantity=2)

]

index, value = max(items, key=lambda(item) : item.cost * item.quantity)

print('$%d, q=%d' % (value.cost, value.quantity))

我收到此错误:

index, value = max(items, key=lambda(item) : item.cost * item.quantity)

TypeError: 'Mock' object is not iterable

我该如何正确实现?

解决方法:

如果您不需要索引,可以直接使用结果:

value = max(items, key=lambda(item) : item.cost * item.quantity)

print value.cost, value.quantity

max返回实际的max项,这是一个Mock实例.您无法将其解压缩为两个项目.

如果你真的想要索引,你可以找到它,或者稍微修改你的搜索以将索引装饰到项目中:

index, value = max(enumerate(items), key=lambda(item): item[1].cost * item[1].quantity)

首先,我们将原始列表转换为第二个列表,其中每个项目都是(索引,值)的元组.然后,键也必须更改,因为item而不是item.cost,现在是一个(index,MockItem)对,所以你需要获取item [1],然后获取属性.不要忘记将结果解压缩到索引和值以获得两者.

标签:python,lambda,collections,python-2-7,max

来源: https://codeday.me/bug/20190722/1507351.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值