*
"splat" operatörüdür: Bir listeyi girdi olarak alır ve onu işlev çağrısında gerçek konumsal argümanlara genişletir.
Yani eğer uniqueCrossTabs
idi [ [ 1, 2 ], [ 3, 4 ] ]
, o zaman itertools.chain(*uniqueCrossTabs)
diyerek aynıdıritertools.chain([ 1, 2 ], [ 3, 4 ])
Bu açıkça içeri girmekten farklı uniqueCrossTabs
. Sizin durumunuzda, düzleştirmek istediğiniz listelerin bir listesi vardır; Ne itertools.chain()
yapar her pozisyonel argüman kendi başına iterable olduğunu kendisine iletmek tüm pozisyonel argümanlar, birleşik bağ üzerinde bir yineleyici döndürür olduğunu.
Diğer bir deyişle, her listeyi uniqueCrossTabs
bir argüman olarak iletmek istersiniz chain()
, bu onları birbirine zincirler, ancak listeleri ayrı değişkenlere sahip değilsiniz, bu nedenle *
listeleri birkaç liste argümanına genişletmek için operatörü kullanırsınız.
Jochen Ritzel'in yorumlarda belirttiği chain.from_iterable()
gibi, başlamak için tek bir yinelenebilirliği varsaydığı için, bu işlem için daha uygundur. Kodunuz daha sonra basitleşir:
uniqueCrossTabs = list(itertools.chain.from_iterable(uniqueCrossTabs))