我有一个包含元组的列表,如果元组中的第一个值包含特定值,我想检查。
这是我目前的解决方案:
cities = [("Hamburg", "Germany"), ("London", "England"), ("Paris", "France")]
for city in cities:
if city[0] == "Hamburg":
contains_Hamburg = True
break
else:
contains_Hamburg = False
如果城市也不存储国家,那么这将是这样的:
cities_simple = ["Hamburg", "London", "Paris"]
contains_Hamburg = "Hamburg" in cities_simple
有没有办法混合使用in
运算符?例如,我可以这样做:
contains_Hamburg = "Hamburg" in [city[0] for city in cities]
但是这会创建第二个列表,所以我对使用它很犹豫(如果python没有真正创建第二个列表,那我觉得没问题。)
答案 0 :(得分:3)
你很亲密! any
可用于检查任何元素是否为True。通过使用generator expression而不是列表推导,您可以避免额外的列表混乱内存。
contains_Hamburg = any('Hamburg' in c for c, s in cities)
您也可以使用==
而不是in
,如下所示。
contains_Hamburg = any('Hamburg' == c for c, s in cities)
答案 1 :(得分:1)
如果您的城市列表是元组和字符串的混合,例如:
cities = [("Hamburg", "Germany"), ("London", "England"), ("Paris", "France"), "Toronto", "Montreal", "New York"]
你可以有一个lambda函数来解压缩它:
city = lambda c: c if type(c) == str else c[0]
并在发电机中使用它:
print( 'New York' in (city(c) for c in cities) )
print( 'Paris' in (city(c) for c in cities) )
如果你打算在很多城市使用这么多次,那么创建像
这样的函数是值得的contains_city = lambda ct: ct in (city(c) for c in cities)
print (contains_city("Moscow"))
print (contains_city("Toronto"))