Python中无需for循环高效比较元组列表指定索引元素并获取唯一值
解决方案
针对给定的元组列表 lst_tups = [('Hello', 1, 'Name:'), ('Goodbye', 1, 'Surname:'), ('See you!', 1, 'Time:')],两个需求的高效无显式循环实现方案如下:
需求1:判断所有元组索引1位置的元素是否全部相同
最优性能方案
利用 all() 函数结合生成器表达式实现(生成器表达式由Python底层C代码执行,比手动写for循环更高效),遇到第一个不同元素时会立即终止检查:
if not lst_tups: # 空列表场景可按需调整判定逻辑 all_same = True else: first_val = lst_tups[0][1] all_same = all(t[1] == first_val for t in lst_tups)
简洁实现方案
借助集合的去重特性,若集合长度为1则说明所有元素相同:
all_same = len(set(t[1] for t in lst_tups)) == 1
注意:此方案需要遍历所有元素构建集合,存在不同元素的场景下性能略逊于前者。
需求2:获取索引1位置的所有唯一值
高效实现方式1
用 map() 提取目标元素后通过 set() 去重,全程依赖Python内置高效代码执行:
unique_vals = set(map(lambda t: t[1], lst_tups))
直观实现方式2
使用集合推导式,写法更易读,性能与前者相近:
unique_vals = {t[1] for t in lst_tups}
内容的提问来源于stack exchange,提问作者matt.aurelio
相关产品推荐
相关产品推荐

