整数が別の整数に存在するかどうかを調べる方法はありますか?例えば、2つの整数AとBが与えられている。整数Aは整数Bの位置Pで発生し、一番左の位置が返されます。例えば整数が別の整数に存在するかどうかを調べる方法
は、53が位置2に1953786で発生するので、関数は2
整数が別の整数に存在するかどうかを調べる方法はありますか?例えば、2つの整数AとBが与えられている。整数Aは整数Bの位置Pで発生し、一番左の位置が返されます。例えば整数が別の整数に存在するかどうかを調べる方法
は、53が位置2に1953786で発生するので、関数は2
が文字列の両方に変換し返すべき:
b = 1953786
a = 53
str(b).index(str(a))
# 2
注複数存在する場合、これは、最初の発生を発見します。 @ user2357112で指摘したように、道路で
二つの可能なバンプ:
検索は線形時間ではありません。実行時の特性は非常に複雑です。実装が使用するスピード・トリックのいくつか、および悪いケースでは二次的な場合、線形よりも優れています。 [直接そこに]
二次的なシナリオでは、str()
コンストラクター自体が非常に大きな整数で問題に遭遇します。
私は元の質問に誤解しました。あなたではなく、単に最初よりもすべての出現を知りたい場合は、行うことができます:あなただけの最初の左端の位置の世話をした場合
import re
a=1553545355343
b=53
all_ocurrences = [m.start() for m in re.finditer(str(b), str(a))]
print(all_ocurrences)
#[2, 6, 9]
は、あなたはブラッドの答えのために行くことができます。
Brad's answerに追加すると、str.index()
は、サブストリングが見つからない場合にはValueError
になります。これが望ましくない場合は、失敗した場合に-1
返しstr.find()
を、使用することができます。
>>> a, b = map(str, [53, 1953786])
>>> b.index(a)
2
>>> b.find(a)
2
>>> b.index("52")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> b.find("52")
-1
ノートをランタイム特性についてもここに適用されます。
検索は線形時間ではありません。実行時の特性は非常に複雑です。実装が使用するスピード・トリックのいくつか、および悪いケースでは二次的な場合、線形よりも優れています。 (しかし、あなたが悪いケースに当たっているならば、あなたの入力は、Pythonの2次の時間変換が 'str'実装で問題になるほど大きくなります。) – user2357112
Cを読むことができるなら、[stringlib /fastsearch.h](https://github.com/python/cpython/blob/master/Objects/stringlib/fastsearch.h) –