我有一个(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")
为了清楚起见,这牺牲了一些效率。
呼啦一阵风
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)
如果我理解正确,这就是你想要的。
添加回答
举报
0/150
提交
取消