为了账号安全,请及时绑定邮箱和手机立即绑定

没有嵌套 ifs 的方法来根据自定义首选项制作具有公共第二元素的非空元组列表?

没有嵌套 ifs 的方法来根据自定义首选项制作具有公共第二元素的非空元组列表?

慕仙森 2021-12-26 15:25:00
我有一个(a,b)b 等于 1,2 或 3的元组列表。我想列出 a 的 where b == 2。如果该列表为空,我想列出所有 a 的 where b == 1。如果那也为空,那么我想列出所有 a 的列表b == 3。现在我正在使用嵌套的 if 来完成这个:sizeTwo = [tup[0] for tup in tupleList if tup[1] == 2]if sizeTwo:        targetList = sizeTwoelse:        sizeOne = [tup[0] for tup in tupleList if tup[1] == 1]        if sizeOne:                targetList = sizeOne        else:                sizeThree = [tup[0] for tup in tupleList if tup[1] == 3]                if sizeThree:                         targetList = sizeThree                else:                         print(f"Error: no matching items in tupleList")有没有“更清洁”的方法来实现这一目标?
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

您可以一次构建所有三个列表,然后只保留您找到的第一个非空列表。


from collections import defaultdict



groups = defaultdict(list)

for a, b in tupleList:

    groups[b].append(a)


targetList = groups[2] or groups[1] or groups[3]

del groups


if not targetList:

    print("error")

为了清楚起见,这牺牲了一些效率。


查看完整回答
反对 回复 2021-12-26
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

试试这个:


tuplist=[(2,3), (1,2), (5,1), (4,2)]


blist=[2,1,3]


newlist=[]


for b in blist:

   for tup in tuplist:

      if tup[1] == b:

         newlist.append(tup)

   if newlist:

      break


print(newlist)

如果我理解正确,这就是你想要的。


查看完整回答
反对 回复 2021-12-26
  • 2 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信