2016-04-07 3 views
-1

itertools.chain считается конвертированным chain('ABC', 'DEF') --> A B C D E F. Тем не менее, я вижу, чтоОбъединение коллекций в Python

>>> Set(itertools.chain([(1,2,3),(4,5,6)])) 
Set([(4, 5, 6), (1, 2, 3)]) 

Я вижу, что на иерархию не влияет. Аналогично, list(itertools.chain([[1,2,3],[4,5,6]]))is said оказывает влияние на списки. Но я не вижу сплющивания в моем случае

>>> list(itertools.chain([[1,2,3],[4,5,6]])) 
[[1, 2, 3], [4, 5, 6]] 

Что, черт возьми, происходит?

ответ

1

Аргумент кулака - это список итераций (кортежей) не one iterable. Вы можете использовать chain.from_iterable() выравниваться список:

>>> from itertools import chain 
>>> list(chain.from_iterable([(1,2,3),(4,5,6)])) 
[1, 2, 3, 4, 5, 6] 
2

Что, черт возьми, происходит?

Вы неправильно поняли answer you referenced

В этом ответе была эта линия:

merged = list(itertools.chain(*list2d)) 

Обратите внимание на использование звездочки (или 'знак') оператора.

В вашем вопросе, нет такого оператора:

>>> list(itertools.chain([[1,2,3],[4,5,6]])) 
[[1, 2, 3], [4, 5, 6]] 

Чтобы понять ответ вы ссылаетесь, попробуйте следующее:

>>> list(itertools.chain(*[[1,2,3],[4,5,6]])) 
[1, 2, 3, 4, 5, 6] 

Что эквивалентно удаление внешнепризматических большинство кронштейнов :

>>> list(itertools.chain([1,2,3],[4,5,6])) 
[1, 2, 3, 4, 5, 6] 
Смежные вопросы