首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python reduce检查所有元素是否相等

python reduce检查所有元素是否相等
EN

Stack Overflow用户
提问于 2012-05-23 08:27:50
回答 3查看 5.3K关注 0票数 9

假设a = [[1,2,3],[1,2,3]] reduce(lambda x,y: x==y, a)返回True

但如果a = [[1,2,3],[1,2,3],[1,2,3]] reduce(lambda x,y: x==y, a)返回False

为什么在第二种情况下,结果是False

请帮帮忙

谢谢

EN

回答 3

Stack Overflow用户

发布于 2012-05-23 08:34:13

试试这个,它适用于任何大小的列表:

all(e == a[0] for e in a)

请注意,您提出的使用reduce的解决方案不能用于超过两个项目,因为第一次比较后的累加值是True,并且您将从那时起将True与每个元素进行比较,显然这是行不通的。

票数 10
EN

Stack Overflow用户

发布于 2018-08-01 05:12:47

你仍然可以使用reduce!看看这个魔术:

bool(reduce(lambda x,y: (x==y)*x, a))

由于x==y的λ返回值为True或False,因此可以乘以输入,然后在下一次比较中使用,因为True*[1,2,3][1,2,3]。它也适用于字符串,True*"MyString""MyString"

试试看。但是,此方法不适用于零的列表。

票数 3
EN

Stack Overflow用户

发布于 2012-05-23 08:40:27

a = [range(1, 4), range(1, 4), range(1, 4)]

为了计算reduce(operator.eq, a)reduce函数将首先对a的前两个元素计算函数operator.eq,以获得True。然后,它将以Truerange(1, 4)作为两个参数再次调用operator.eq,并获得reduce的最终结果False

也许你想要:

from functools import partial
import operator
allequal = reduce(partial(operator.eq, a[0]), a[1:])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10711918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档