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

我有一个(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 = sizeTwo

else:

        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")

有没有“更清洁”的方法来实现这一目标?


慕仙森
浏览 159回答 2
2回答

蝴蝶不菲

您可以一次构建所有三个列表,然后只保留您找到的第一个非空列表。from collections import defaultdictgroups = defaultdict(list)for a, b in tupleList:    groups[b].append(a)targetList = groups[2] or groups[1] or groups[3]del groupsif not targetList:    print("error")为了清楚起见,这牺牲了一些效率。

呼啦一阵风

试试这个: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:      breakprint(newlist)如果我理解正确,这就是你想要的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python