我想要一个函数check
来检查给定的list
减少(“归结”)到给定函数下的一个值reduce_function
。(一个常见的例子可能是检查列表列表是否仅包含相等长度的子列表。)
我至少看到了以下三种方法来实现这一点。对于他们每个人,我都看到了一些优点和缺点。在我看来,它们中的任何一个都没有真正的可读性。你能给我一个详细的概述:
哪一个会被认为是最具可读性和最“pythonic”的?
1. 测量一组缩减值的长度。
这似乎最易读,但需要reduce_function
返回一个哈希:
def check(lst):
return len(set(map(reduce_function, lst))) == 1
2.统计组数
def check(lst):
return len(list(itertools.groupby(lst, key=reduce_function)) == 1
3. 用于all
与第一个元素进行比较
这需要一个额外的 -or
语句(可以用if
-else
语句代替)来涵盖lst
为空的情况。
def check(lst):
return not lst or all([reduce_function(el) == reduce_function(lst[0]) for el in lst])