>>> big = [[1, '34', '44'], [1, '40', '30', '41'], [1, '41', '40', '42'], [1, '42', '41', '43'], [1, '43', '42', '44'], [1, '44', '34', '43']]
>>> set(reduce ( lambda l,a : l + a, big))
set([1, '44', '30', '42', '43', '40', '41', '34'])
そして、最終結果としてリストのリストが本当に必要な場合
>>>>[list(set(reduce ( lambda l,a : l + a, big)))]
[[1, '44', '30', '42', '43', '40', '41', '34']]
また、リストの追加のためにラムダ関数を再コーディングしたくない場合は、次のようにします。
>>>>[list(set(reduce ( list.__add__, big)))]
[[1, '44', '30', '42', '43', '40', '41', '34']]
編集: list.__add__ の代わりに itertools.chain を使用することについてのあなたの推奨の後、元のポスターで使用された元の変数を使用して、両方の timeit を実行しました。
timeit の時間は list.__add__ で約 2.8 秒、itertools.chain で約 3.5 秒のようです。
私はこのページをチェックしましたが、そうです、 itertools.chain には from_iterable メソッドが含まれており、パフォーマンスが大幅に向上します。以下の list.__add__、itertools.chain、および itertools.chain.from_iterable を参照してください。
>>> timeit.timeit("[list(set(reduce ( list.__add__, big)))]", setup="big = [ [10,20,30,40] for ele in range(10000)]", number=30)
16.051744650801993
>>> timeit.timeit("[list(set(reduce ( itertools.chain, big)))]", setup="big = [ [10,20,30,40] for ele in range(10000)]", number=30)
54.721315866467194
>>> timeit.timeit("list(set(itertools.chain.from_iterable(big)))", setup="big = [ [10,20,30,40] for ele in range(10000)]", number=30)
0.040056066849501804
アドバイスありがとうございます:)