如何对嵌套列表元素进行通用的按位AND/OR/多数投票运算?
通用元素级运算解决方案
针对任意数量子列表的嵌套列表,我们可以通过转置列表的方式,将每个索引位置的元素打包成元组,再对每个元组执行对应运算。以下是具体实现:
1. 元素级AND运算
利用all()函数判断元组内所有元素是否为1(非0),转换为整数得到结果:
a = [[1, 1, 1, 0, 0, 0], [1, 1, 1, 0, 1, 1], [1, 0, 0, 1, 0, 0]] def elementwise_and(lists): return [int(all(items)) for items in zip(*lists)] # 输出:[1, 0, 0, 0, 0, 0] print(elementwise_and(a))
2. 元素级OR运算
利用any()函数判断元组内是否存在至少一个1,转换为整数得到结果:
def elementwise_or(lists): return [int(any(items)) for items in zip(*lists)] # 输出:[1, 1, 1, 1, 1, 1] print(elementwise_or(a))
3. 多数投票运算
统计每个元组中1的数量,若超过总数的一半则返回1,否则返回0:
def majority_vote(lists): result = [] for items in zip(*lists): count_ones = sum(items) total_elements = len(items) # 可根据需求调整多数判定规则(比如>=半数) result.append(1 if count_ones > total_elements / 2 else 0) return result # 输出:[1, 1, 1, 0, 0, 0] print(majority_vote(a))
核心原理
zip(*lists)会将嵌套列表转置,把原列表中每个子列表的同索引元素打包成元组。例如原列表的3个子列表,转置后会生成6个元组,每个元组包含对应索引位置的3个元素。这种方式天然支持任意数量的子列表,无需针对固定数量做特殊处理。
内容的提问来源于stack exchange,提问作者Shehzad Khan
相关产品推荐
相关产品推荐

