Python实现:嵌套列表所有第二个元素相同时打印,否则执行else逻辑
问题修正:判断嵌套列表子列表第二个元素是否全相同
你的代码存在两个关键问题:
jobs_name的定义不规范,当前是三个独立元组组成的序列,建议改为嵌套列表格式(虽然元组也能正常遍历,但列表嵌套更符合常规写法)- 核心判断逻辑错误:
j[1] == j[1]是恒成立的语句,完全无法实现“所有子列表第二个元素是否相同”的判断需求
以下是修正后的代码,完全符合你的需求:
# 修正为嵌套列表格式 jobs_name = [ ['nbu.stn.prd.allbackups.box.lp2', 'SU'], ['nbu.stn.prd.1800.box.lp2', 'RU'], ['nbu.stn.prd.1810.box.lp2', 'RU'] ] def check_box(): # 提取所有子列表的第二个元素 all_statuses = [job[1] for job in jobs_name] # 取第一个状态作为基准,检查所有状态是否一致 all_same = all(status == all_statuses[0] for status in all_statuses) # 根据判断结果选择前缀 prefix = "Status of the box: " if all_same else "Status of the boxes: " # 遍历输出每个子列表的内容 for job in jobs_name: res = " ".join(job) print(prefix + res) check_box()
代码说明:
- 规范定义嵌套列表:将
jobs_name改为标准的嵌套列表,结构更清晰 - 批量提取状态值:用列表推导式
all_statuses收集所有子列表的第二个元素 - 判断是否全部相同:用
all()函数检查所有状态是否等于第一个状态值,all()会在所有元素满足条件时返回True - 统一前缀输出:根据
all_same的结果选择对应的打印前缀,再遍历所有子列表输出内容
这样运行后,因为你的示例数据里有SU和RU两种状态,会执行else分支的前缀,输出所有子列表内容;如果所有子列表第二个元素都相同(比如全是SU),则会用Status of the box:作为前缀输出。
内容的提问来源于stack exchange,提问作者jada
相关产品推荐
相关产品推荐

