Itertools.chain.from_iterable

前端 未结 2 987
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-22 07:46

Can anyone explain to me, what exactly this code snippet is doing?

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


        
2条回答
  •  臣服心动
    2021-01-22 08:30

    It's hard to tell what does your code do without knowing the type and value of the objects passed to the functions. However, the function chain.from_iterable tries to create a flattened iterable off of country_and_countrycodes which presumably should be a nested iterables like a nested list. At next step the set function creates a set from the flattened result in order to be and-able with set(all_countries).

    Now as a more Pythonic alternative to the following part:

    set(itertools.chain.from_iterable(country_and_countrycodes))
    

    You could just pass the iterables to set().union() function in order to create a union set of unique items at once.

    Example:

    In [2]: set().union(*[[1, 3], [5, 6], [3, 5]])
    Out[2]: {1, 3, 5, 6}
    

    So, you can change that code to the following:

    set().union(*country_and_countrycodes) & set(all_countries)
    # Or
    # set().union(*country_and_countrycodes).intersection(all_countries)
    

提交回复
热议问题