4

リスト内のすべての単語のすべての文字を重複せずに印刷しようとしています。

wordlist = ['cat','dog','rabbit']
letterlist = []
[[letterlist.append(x) for x in y] for y in wordlist]

上記のコードは['c', 'a', 't', 'd', 'o', 'g', 'r', 'a', 'b', 'b', 'i', 't']、探している間に を生成し['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i']ます。

リスト内包表記を変更して重複を削除するにはどうすればよいですか?

4

6 に答える 6

10

あなたは秩序を維持することを気にしますか?

>>> wordlist = ['cat','dog','rabbit']
>>> set(''.join(wordlist))
{'o', 'i', 'g', 'd', 'c', 'b', 'a', 't', 'r'}
于 2013-07-21T16:28:23.087 に答える
4

2 つのアプローチ:

順序の維持:

>>> from itertools import chain
>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys(chain.from_iterable(wordlist)))
['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i']

注文にこだわらない場合:

>>> list(set().union(*wordlist))
['a', 'c', 'b', 'd', 'g', 'i', 'o', 'r', 't']

これはどちらも、副作用のために list-comps を使用していません。

[[letterlist.append(x) for x in y] for y in wordlist]

Nones純粋に変更するためのリストのリストを作成していますletterlist

于 2013-07-21T16:59:06.907 に答える
2

独自のコードを編集する場合:

[[letterlist.append(x) for x in y if x not in letterlist] for y in wordlist]

また

list(set([[letterlist.append(x) for x in y if x not in letterlist] for y in wordlist]))

そうしないと:

list(set(''.join(wordlist)))
于 2013-07-21T16:27:59.990 に答える
0

を使用setして重複を削除できますが、順序は維持されません。

>>> letterlist = list({x for y in wordlist for x in y})
>>> letterlist
['a', 'c', 'b', 'd', 'g', 'i', 'o', 'r', 't']
>>> 
于 2013-07-21T16:27:37.927 に答える
0
wordlist = ['cat','dog','rabbit']
s = set()
[[s.add(x) for x in y] for y in wordlist]
于 2013-07-21T16:28:15.603 に答える