2017-10-24 8 views

答えて

8

が文字列の両方に変換し返すべき:

b = 1953786 
a = 53 
str(b).index(str(a)) 
# 2 

注複数存在する場合、これは、最初の発生を発見します。 @ user2357112で指摘したように、道路で

二つの可能なバンプ:

  1. 検索は線形時間ではありません。実行時の特性は非常に複雑です。実装が使用するスピード・トリックのいくつか、および悪いケースでは二次的な場合、線形よりも優れています。 [直接そこに]

  2. 二次的なシナリオでは、str()コンストラクター自体が非常に大きな整数で問題に遭遇します。

+2

検索は線形時間ではありません。実行時の特性は非常に複雑です。実装が使用するスピード・トリックのいくつか、および悪いケースでは二次的な場合、線形よりも優れています。 (しかし、あなたが悪いケースに当たっているならば、あなたの入力は、Pythonの2次の時間変換が 'str'実装で問題になるほど大きくなります。) – user2357112

+1

Cを読むことができるなら、[stringlib /fastsearch.h](https://github.com/python/cpython/blob/master/Objects/stringlib/fastsearch.h) –

2

私は元の質問に誤解しました。あなたではなく、単に最初よりもすべての出現を知りたい場合は、行うことができます:あなただけの最初の左端の位置の世話をした場合

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] 

は、あなたはブラッドの答えのために行くことができます。

0

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 

ノートをランタイム特性についてもここに適用されます。

関連する問題