web-dev-qa-db-ja.com

どのようにpythonでリスト項目のセットを構成するのですか?

私はpythonでファイル名のlistを持っています、そして私はすべてのファイル名からsetを構築したいと思います。

filelist=[]
for filename in filelist:
    set(filename)

これはうまくいかないようです。どうすればこれができますか?

121
securecoding

ハッシュ可能なオブジェクトのリストがある場合(ファイル名はおそらく文字列なので、それらは数えるべきです):

lst = ['foo.py', 'bar.py', 'baz.py', 'qux.py', Ellipsis]

セットを直接構築することができます。

s = set(lst)

実際、setは、任意の反復可能なオブジェクトに対してこのように機能します!(アヒルの型付けは大丈夫ではないですか?)


あなたが繰り返しそれをやりたいならば:

s = set()
for item in iterable:
    s.add(item)

しかし、このようにする必要はめったにありません。 set.addメソッドは非常に便利なので、私はそれを言及するだけです。

235
mgilson

最も直接的な解決策はこれです:

 s = set(filelist)

元のコードの問題は、値がセットに割り当てられていなかったことです。これがあなたのコードの修正版です。

 s = set()
 for filename in filelist:
     s.add(filename)
 print(s)
11

できるよ

my_set = set(my_list)

または、Python 3の場合、

my_set = {*my_list}

リストからセットを作成します。逆にすることもできます

my_list = list(my_set)

または、Python 3の場合、

my_list = [*my_set]

セットからリストを作成します。

集合は本質的に順不同であるため、リストを集合に変換するとき、リスト内の要素の順序は一般に失われることに注意してください。 (CPythonの1つの例外は、リストが負でない整数のみで構成されている場合ですが、これはCPythonでの集合の実装の結果であり、この動作はPythonの実装によって異なることがあると思います)

5
HelloGoodbye

これは別の解決策です:

>>>list1=["C:\\","D:\\","E:\\","C:\\"]
>>>set1=set(list1)
>>>set1
set(['E:\\', 'D:\\', 'C:\\'])

このコードでは、私はそれをセットに変えるためにsetメソッドを使い、それからリストから全ての重複した値を取り除きました

2
Adi Ml

単純に次の行を入力してください

new_list = set(your_list)
0
muknerd