谁能向我解释一下此代码段到底在做什么?

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'}


由于这里唯一的公共元素是'United States',所以这就是我们得到的输出。

关于python - Itertools.chain.from_iterable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50775024/

10-12 22:17