Skip to main content
 首页 » 编程设计

python之Itertools.chain.from_iterable

2025年05月04日22del

谁能给我解释一下,这个代码片段到底在做什么?

chained_country_list = set(itertools.chain.from_iterable(country_and_countrycodes)) & set(all_countries) 

我知道它运行两个相互比较的列表,以一组唯一值结束,这些值存在于它比较的两个列表中。

但它是如何做到的,以及幕后发生的事情,让我感到困惑。

如果有人能分享一些关于这个问题的信息,那将是一个巨大的帮助。

请您参考如下方法:

让我们分解代码的每个重要元素:

itertools.chain.from_iterable:

基本上,这用于展平嵌套列表,如下所示:

l = [[0], [1, 2], [2], [3, 6], [4], [5, 10]] 
list(itertools.chain.from_iterable(l))     

输出:

[0, 1, 2, 2, 3, 6, 4, 5, 10] 

& 两组之间的运算符:

考虑以下集合 a 和 b 的示例。

a = {1, 2, 3} 
b = {2, 3, 4} 
a & b 

输出:

{2, 3} 

所以基本上它获得了两个集合之间的共同元素。这是 2 和 3。

整体代码:

假设:

country_and_countrycodes = [('United States', 'US'), ('China', 'CH')] 
all_countries = ['United States', 'Mongolia', 'Togo'] 

现在,第一部分是:

set(itertools.chain.from_iterable(country_and_countrycodes)) 

这给了我们:

{'CH', 'China', 'US', 'United States'} 

所以,它只是从元组中得到一个平面集。

那么,第二部分是:

set(itertools.chain.from_iterable(country_and_countrycodes)) & set(all_countries) 

这给了我们:

{'United States'} 

基本上,我们所做的是:

{'CH', 'China', 'US', 'United States'} & {'United States', 'Mongolia', 'Togo'} 

因为这里唯一的公共(public)元素是'United States',所以这就是我们得到的输出。