重複の可能性:
Pythonのリストの(不規則な)リストをフラット化する
私はPythonのようなリストを持っています
l=[1,2,[3,4,5],[[4,2,4],[4,7,8]]]
セットを使用してすべての一意の値を取得したいのですが、これは失敗します
set(l)
TypeError: unhashable type: 'list'
誰か助けてくれませんか?リストなどのリストとセットを使いたいTHX
重複の可能性:
Pythonのリストの(不規則な)リストをフラット化する
私はPythonのようなリストを持っています
l=[1,2,[3,4,5],[[4,2,4],[4,7,8]]]
セットを使用してすべての一意の値を取得したいのですが、これは失敗します
set(l)
TypeError: unhashable type: 'list'
誰か助けてくれませんか?リストなどのリストとセットを使いたいTHX
これをセットに入れる前に、ネストされた構造を「ほどく」またはフラットにする必要があります。そのためのジェネレーターを使用して、大きなリストに対してこれを効率的に保つことができます。
def flatten(lst):
for element in lst:
if isinstance(element, list):
for subelement in flatten(element):
yield subelement
else:
yield element
次に、リストでそのジェネレーターを使用しl
てセットを作成します。
set(flatten(l))
このアプローチはどうですか。セット操作を適用する前に、まずリストをフラット化します。
import collections
def flat_list(tlist):
if isinstance(tlist, collections.Iterable):
return [j for i in tlist for j in flat_list(i)]
else:
return [tlist]
それから:
myl=[1,2,[3,4,5],[[4,2,4],[4,7,8]]]
print set(flat_list(myl))
与えます:
set([1, 2, 3, 4, 5, 7, 8])
ジェネレーターを使用した @MartijnPieters アプローチは、このリスト内包表記ベースのアプローチよりも非常に大きなリストでより効率的に機能します。