Python 在列表中使用,检查元组中的一项

Python 在列表中使用,检查元组中的一项,python,list,Python,List,我有一个包含元组的列表,我想检查元组中的第一个值是否包含特定值 这是我当前的解决方案: cities = [("Hamburg", "Germany"), ("London", "England"), ("Paris", "France")] for city in cities: if city[0] == "Hamburg": contains_Hamburg = True break else: contains_Hamburg = Fals

我有一个包含元组的列表,我想检查元组中的第一个值是否包含特定值

这是我当前的解决方案:

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
contains_Hamburg = "Hamburg" in [city[0] for city in cities]
有没有办法混合这些内容并使用in运算符?例如,我可以这样做:

cities_simple = ["Hamburg", "London", "Paris"]
contains_Hamburg = "Hamburg" in cities_simple
contains_Hamburg = "Hamburg" in [city[0] for city in cities]
但是这会创建第二个列表,所以我很犹豫是否使用它,如果python没有真正创建第二个列表,我想这会很好!可用于检查任何元素是否为真。通过使用列表理解而不是列表理解,您可以避免额外的列表混乱的内存

contains_Hamburg = any('Hamburg' in c for c, s in cities)
此外,您还可以使用==而不是在中,如下所示

contains_Hamburg = any('Hamburg' == c for c, s in cities)
你接近了!可用于检查任何元素是否为真。通过使用列表理解而不是列表理解,您可以避免额外的列表混乱的内存

contains_Hamburg = any('Hamburg' in c for c, s in cities)
此外,您还可以使用==而不是在中,如下所示

contains_Hamburg = any('Hamburg' == c for c, s in cities)

如果您的城市列表将混合元组和字符串,如:

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

如果您的城市列表将混合元组和字符串,如:

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

在dictcities中使用dict:contains\u hamburg=hamburg。在dictcities中使用dict:contains\u hamburg=hamburg。呸,我想我们两个答案都在这里没有意义。虽然在城市中为c,s做c=='Hamburg'比访问索引更快。@Alex啊,谢谢,没有想到元组解包会有什么不同。我会编辑我的答案。呸,我想我们的答案都在这里没有意义。虽然在城市中为c,s做c=='Hamburg'比访问索引更快。@Alex啊,谢谢,没有想到元组解包会有什么不同。我将编辑我的答案。