基本的に、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'
セットの同等の呼び出しは何ですか?
', '.join(set_3)
join
は文字列メソッドであり、setメソッドではありません。
セットにはjoin
メソッドはありませんが、 str.join
代わりに。
', '.join(set_3)
str.join
メソッドは、リストやセットなどの反復可能なオブジェクトで機能します。
注:整数を含むセットでこれを使用する場合は注意してください。 joinを呼び出す前に、整数を文字列に変換する必要があります。例えば
set_4 = {1, 2}
', '.join(str(s) for s in set_4)
join
は文字列で呼び出されます:
print ", ".join(set_3)
セットには順序がないため、リストをセットに変換するとmayが失われます。
>>> orderedVars = ['0', '1', '2', '3']
>>> setVars = set(orderedVars)
>>> print setVars
('4', '2', '3', '1')
通常、順序は残りますが、大規模なセットの場合、ほぼ確実に順序は続きません。
最後に、人々が不思議に思っていることを念頭に置いて、結合に「、」は必要ありません。
ちょうど: '' .join(set)
:)
set
もlist
にもそのようなメソッドjoin
がなく、文字列には次のメソッドがあります。
','.join(set(['a','b','c']))
ところで、変数にname list
を使用しないでください。 list_
、my_list
またはlist
が頻繁に使用されるため、他の名前python関数。
後方に持っているだけだと思います。
print ", ".join(set_3)
Joinステートメントを逆方向に試してみてください:
print ', '.join(set_3)
次のエッジケースを処理するメソッドを作成しました。
", ".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))