Python中从结构不同的两个列表提取共同国名元素的方法
解决方案:提取两个列表中的共同国家名称
没问题,这事儿不难,我给你两种实用的方法,你可以根据需求选:
方法1:用集合快速找交集(高效,顺序可能变化)
首先我们得从列表a里把所有国家名称提取出来,然后和列表b做交集操作——集合的交集运算在处理这类匹配问题时特别高效。
# 你的原始数据(先修正列表b的格式,补上逗号) a = [['Afghanistan', 'AF'], ['Åland Islands', 'AX'], ['Albania', 'AL'], ['Algeria', 'DZ'], ['American Samoa', 'AS'], ['Andorra', 'AD'], ['Angola', 'AO']] b = ['Afghanistan', 'AFRICA', 'Albania', 'Algeria', 'Angola'] # 从a中提取所有国家名称 country_names_a = [country[0] for country in a] # 计算两个列表的共同元素,转成列表 common_countries = list(set(country_names_a) & set(b)) print(common_countries) # 输出示例(顺序可能因集合特性略有不同): ['Afghanistan', 'Albania', 'Algeria', 'Angola']
方法2:用列表推导式保持原顺序
如果你需要结果和列表a中国家出现的顺序一致,就用这种方法,它会逐个检查a里的国家是否在b中,保留原有顺序:
# 同样的原始数据 a = [['Afghanistan', 'AF'], ['Åland Islands', 'AX'], ['Albania', 'AL'], ['Algeria', 'DZ'], ['American Samoa', 'AS'], ['Andorra', 'AD'], ['Angola', 'AO']] b = ['Afghanistan', 'AFRICA', 'Albania', 'Algeria', 'Angola'] country_names_a = [country[0] for country in a] common_countries_ordered = [country for country in country_names_a if country in b] print(common_countries_ordered) # 输出: ['Afghanistan', 'Albania', 'Algeria', 'Angola']
补充说明
- 列表
b里的非国家元素(比如示例中的'AFRICA')会自动被过滤掉,因为它们不在a的国家名称列表里,完全符合你的需求。 - 如果你的数据量很大,方法1的集合操作速度会比方法2快很多;如果对顺序有要求,优先选方法2。
内容的提问来源于stack exchange,提问作者pedskon
相关产品推荐
相关产品推荐

