web-dev-qa-db-ja.com

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

基本的に、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'

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

65
Spencer
', '.join(set_3)

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

137
Jmjmh

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

', '.join(set_3)

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

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

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

joinは文字列で呼び出されます:

print ", ".join(set_3)
5
MByD

セットには順序がないため、リストをセットに変換するとmayが失われます。

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

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

最後に、人々が不思議に思っていることを念頭に置いて、結合に「、」は必要ありません。

ちょうど: '' .join(set)

:)

4
John

setlistにもそのようなメソッドjoinがなく、文字列には次のメソッドがあります。

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

ところで、変数にname listを使用しないでください。 list_my_listまたはlistが頻繁に使用されるため、他の名前python関数。

4
Ski

後方に持っているだけだと思います。

print ", ".join(set_3)
3
recursive

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

print ', '.join(set_3)
3
Hunter

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

  • サイズ1を設定します。 ", ".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))