0

私は以下を持っており、このドキュメントを介してリストを平坦化しました

>>> wordlist = ['cat','dog','rabbit']
>>> letterlist = [lt for wd in wordlist for lt in wd]
>>> print(letterlist)
['c', 'a', 't', 'd', 'o', 'g', 'r', 'a', 'b', 'b', 'i', 't']

リスト内包表記を拡張して、重複する文字を削除できますか。望ましい結果は次のとおりです (順不同)。

['a', 'c', 'b', 'd', 'g', 'i', 'o', 'r', 't']

セットに変換してからリストに戻すことはできますが、リストとして保持することをお勧めします。

4

3 に答える 3

4

最も簡単なのは、リスト構成の代わりに集合内包表記を使用することです。

letterlist = {lt for wd in wordlist for lt in wd}

私がしたことは、角括弧を中括弧に置き換えることだけでした。これは Python 2.7 以降で動作します。

Python 2.6 以前では、set()代わりにジェネレーター式で callable を使用します。

letterlist = set(lt for wd in wordlist for lt in wd)

最後になりましたが、文字列を連鎖させてすべてのシーケンスから文字を生成することで、理解構文を完全に置き換えることができますitertools.chain.from_iterable()。一連のシーケンスを指定すると、1 つの長いシーケンスが返されます。

from itertools import chain
letterlist = set(chain.from_iterable(wordlist))
于 2013-10-28T20:49:01.187 に答える
3

セットは、イテラブルから一意の要素を取得する簡単な方法です。リストのリストを平坦化するには、itertools.chainそれを行う便利な方法が用意されています。

from itertools import chain

>>> set(chain.from_iterable(['cat','dog','rabbit'])
{'a', 'b', 'c', 'd', 'g', 'i', 'o', 'r', 't'}
于 2013-10-28T20:48:31.290 に答える
2

集合内包表記を使うべきだと思います

wordlist = ['cat','dog','rabbit']
letterlist = {lt for wd in wordlist for lt in wd}
print(letterlist)

setこれは、代わりに以前のバージョンを使用する場合、python 2.7 以降でのみ機能します。{}

wordlist = ['cat','dog','rabbit']
letterlist = set(lt for wd in wordlist for lt in wd)
print(letterlist)
于 2013-10-28T20:47:12.497 に答える