Pythonでリストアイテムからセットを作成するにはどうすればよいですか?


170

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

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

これは機能していないようです。どうすればできますか?

回答:


322

ハッシュ可能なオブジェクトのリストがある場合(ファイル名はおそらく文字列であるため、カウントする必要があります):

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方法は非常に便利なので、私はそれについてのみ述べます。


1
私は2.7を使用していますが、これは動作しないようです。何が起きてる?Python 2.7.13(デフォルト、2017年7月24日14:22:59)または詳細については「ライセンス」。>>> x = [1,2,3] >>> set(x)set([1、2、3])>>>
opus111

:それは働いたよう@ user1902291--それはあなただけでNEEK結果セットを追跡するために、見えます y = set(x)
mgilson

また、リストからセットに項目を追加すると、リストから重複を除外したい場合に非常に便利です。
Pranjal Kumar

12

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

 s = set(filelist)

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

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

9

できるよ

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実装間で異なる可能性があると思います。)


4

ここに別の解決策があります:

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

このコードでは、setメソッドを使用してそれをセットにしてから、リストから重複する値をすべて削除しました



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.