我有以下格式的元组列表:
list = [(var1, var2, var3). (var1, var2, var3), ...]
是否可以构建if var is in list
语句,仅检查var
个插槽中是否有var3
?
例如,给出以下列表:
list = [(1, 2, 3), (7, 8, 9)]
我希望能够检查if var is in List
以便var == 3
成立,但如果var == 2
则为真,因为它只检查 每个元组中的具体位置 。
答案 0 :(得分:4)
您可以使用内置的any
:
>>> lst = [(1, 2, 3), (7, 8, 9)]
>>> any(v3==3 for *_, v3 in lst)
True
一旦找到匹配项就会短路,因此您无需遍历整个列表。
可以扩展到Python 2(因为扩展解包不起作用):
any(v3==3 for _, _, v3 in lst)
答案 1 :(得分:3)
您可以使用以下技巧获取所有var1值的列表,所有var2值的列表以及所有var3值的列表:
var1s, var2s, var3s = zip(*list)
然后,您只需检查if var is in var3s
。
答案 2 :(得分:2)
您可以使用:
if any(x[2] == var for x in l)
(p.s:不要为变量list
命名,因为你覆盖了内置类型)