私は Python を学ぼうとしていますが、現在の問題に対する答えにたどり着くことができましたが、将来、より良い答えを見つける方法を知りたいと思っています。
私の目標は、文字列のリストを入力として取り、文字列内の文字の結合である文字列を返すことでした。
unionStrings( ("ab", "bc"))
「abc」を返します。
私は次のように実装しました:
def unionStrings( strings ):
# Input: A list of strings
# Output: A string that is the (set) union of input strings
all = set()
for s in strings:
all = all.union(set(s))
return "".join(sorted(list(all)))
for ループは不要だと感じ、よりきちんとした、より pythonic(?) な改善を探しました。
最初の質問set.union()
:の代わりにクラス メソッドを使用することにつまずきましたset1.union(set2)
。標準の Python ドキュメントでこれを見つけることができたはずですか? 私はそこでそれを見つけることができませんでした。
そこで、次のように set.union() を使用してみました:
>>> set.union( [set(x) for x in ("ab","bc")] )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: descriptor 'union' requires a 'set' object but received a 'list'
繰り返しますが、私はつまずいて、最終的に次のように呼び出す必要があることに気付きました。
>>> set.union( *[set(x) for x in ("ab","bc")] )
set(['a', 'c', 'b'])
2番目の質問set.union
:これは、 (事実上)次のように宣言されていることを意味すると思います
set.union( *sets)
そしてそうではない
set.union( setsList )
あれは正しいですか?(私はまだスプラット '*' の使い方を学んでいます。)
3 番目の質問: の署名に関するドキュメントはどこにありset.union()
ますか? set/freezeset doc には見当たりませんでしたし、inspect
モジュールから何も得られませんでした。モジュールかどうかさえわかりませんset
が、タイプのようです。それはモジュールで定義されていますか、それとも何ですか?
私の複雑な質問を読んでくれてありがとう。もっと「Pythonドキュメントをナビゲートするにはどうすればいいですか?」です。「Pythonコードでこれを行うにはどうすればよいですか?」より。
jonrsharpe のコメントへの対応:
ああああ!私は、個別の静的メソッドとインスタンス メソッドを定義する C++ に慣れています。あなたがそれを説明した今、私は何が起こっているのかを本当に見ることができます.
私が違うことをするかもしれない唯一のことは、それを次のように書くことです
t = set.union( *[set(x) for x strings] )
return "".join(sorted(t))
機能的には、文字列が異なる役割を果たしていない場合に、strings[0]
文字列とは異なる扱いをするのが面倒だからです。strings[1:]
それらの 1 つを呼び出さなければならない場合は、とにかくそれを行うset()
ので、それらすべてを呼び出したいと思います。union()
しかし、それはただのスタイルですよね?