假设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
请帮帮忙
谢谢
发布于 2012-05-23 08:34:13
试试这个,它适用于任何大小的列表:
all(e == a[0] for e in a)
请注意,您提出的使用reduce
的解决方案不能用于超过两个项目,因为第一次比较后的累加值是True
,并且您将从那时起将True
与每个元素进行比较,显然这是行不通的。
发布于 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"
。
试试看。但是,此方法不适用于零的列表。
发布于 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
。然后,它将以True
和range(1, 4)
作为两个参数再次调用operator.eq
,并获得reduce
的最终结果False
。
也许你想要:
from functools import partial
import operator
allequal = reduce(partial(operator.eq, a[0]), a[1:])
https://stackoverflow.com/questions/10711918
复制相似问题