Python:セット内のエントリを1つの文字列に結合する方法は?


84

基本的に、1つの文字列を出力するために、セット内のエントリを結合しようとしています。リストの結合関数に似た構文を使用しようとしています。これが私の試みです:

list = ["gathi-109","itcg-0932","mx1-35316"]
set_1 = set(list)
set_2 = set(["mx1-35316"])
set_3 = set_1 - set_2
print set_3.join(", ")

ただし、次のエラーが発生します。 AttributeError: 'set' object has no attribute 'join'

セットの同等の呼び出しは何ですか?

回答:


165
', '.join(set_3)

これjoinは文字列メソッドであり、setメソッドではありません。


14
セットに整数/長整数が含まれている場合は、使用する必要があります', '.join(str(s) for s in set_3)
55651909-089b-4e04-9408-47c5bf 2013

31

セットにはjoinメソッドがありませんが、str.join代わりに使用できます。

', '.join(set_3)

このstr.joinメソッドは、リストやセットを含むすべての反復可能なオブジェクトで機能します。

注:整数を含むセットでこれを使用する場合は注意してください。結合を呼び出す前に、整数を文字列に変換する必要があります。例えば

set_4 = {1, 2}
', '.join(str(s) for s in set_4)

5

join文字列に呼び出されます。

print ", ".join(set_3)

4

どちらsetもそのlistようなメソッドを持っていませんjoin、文字列はそれを持っています:

','.join(set(['a','b','c']))

ちなみに、list変数に名前を使用しないでください。それ与えるlist_my_listためか、他のいくつかの名前をlist頻繁にPythonの機能を使用しています。


4

セットには順序がありません。そのため、リストをセットに変換すると、順序失われる可能性があります。

>>> orderedVars = ['0', '1', '2', '3']
>>> setVars = set(orderedVars)
>>> print setVars
('4', '2', '3', '1')

通常、注文は残りますが、大規模なセットの場合はほぼ確実に残りません。

最後に、人々が疑問に思っている場合に備えて、結合に「、」は必要ありません。

ただ: '' .join(set)

:)



3

逆方向に結合ステートメントを試してください:

print ', '.join(set_3)

0

次のエッジケースを処理するメソッドを作成しました。

  • サイズを1に設定します。A", ".join({'abc'})は戻り"a, b, c"ます。私の希望する出力はでした"abc"
  • 整数を含むセット。
  • 空のセットは戻るはずです ""
def set_to_str(set_to_convert, separator=", "):
        set_size = len(set_to_convert)
        if not set_size:
            return ""
        elif set_size == 1:
            (element,) = set_to_convert
            return str(element)
        else:
            return separator.join(map(str, set_to_convert))

" ".join({'abc'})目的のo / pを取得するために使用できた可能性があります"abc"repl.itの実行可能コード
Abhijeet

面白い。set( 'abc')と{'abc'}の動作が異なることに気づきました。それが私を失望させたものです。
フェルナンドイララザヴァルG 2018

セット辞書で動作するように実行可能コードを更新しました
Abhijeet 2018

参考までに、{'abc'}はセットです。また"".join(set(ip_data))、setは3つの要素{'a'、 'b'、 'c'}を作成しますが、順序は保持しないため、文字のランダムな順序(たとえば、 'bca')を指定します。
フェルナンドイララザヴァルG 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.