私はpythonでファイル名のlist
を持っています、そして私はすべてのファイル名からset
を構築したいと思います。
filelist=[]
for filename in filelist:
set(filename)
これはうまくいかないようです。どうすればこれができますか?
ハッシュ可能なオブジェクトのリストがある場合(ファイル名はおそらく文字列なので、それらは数えるべきです):
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
メソッドは非常に便利なので、私はそれを言及するだけです。
最も直接的な解決策はこれです:
s = set(filelist)
元のコードの問題は、値がセットに割り当てられていなかったことです。これがあなたのコードの修正版です。
s = set()
for filename in filelist:
s.add(filename)
print(s)
できるよ
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の実装によって異なることがあると思います)
これは別の解決策です:
>>>list1=["C:\\","D:\\","E:\\","C:\\"]
>>>set1=set(list1)
>>>set1
set(['E:\\', 'D:\\', 'C:\\'])
このコードでは、私はそれをセットに変えるためにsetメソッドを使い、それからリストから全ての重複した値を取り除きました
単純に次の行を入力してください
new_list = set(your_list)