5

ユーザーに 2 つの文字列を入力してもらい、類似した文字があるかどうかを確認し、ある場合は、検索またはインデックス関数を使用せずに、最初の類似点が発生する位置を取得します。

以下は私がこれまでに持っているものですが、完全には機能しません。これまでのところ、類似点を見つけることができましたが、インデックス関数を使用せずにそれらの類似点の位置を見つける方法がわかりません。

string_a = "python"

string_b = "honbe"

same = []

a_len = len(string_a)
b_len = len(string_b)

for a in string_a:
    for b in string_b:

        if a == b:
            same.append(b)          

print (same)

現在、出力は次のとおりです。

['h', 'o', 'n']

基本的に私が求めているのは、Python Index 関数を使用せずにこれらの文字の位置を見つけるにはどうすればよいですか?

4

5 に答える 5

3

この問題は、リスト内包表記と itertools の組み合わせを使用して解決できます。

import itertools
string_a = 'hello_world'
string_b = 'hi_low_old'

same = [ i for i,x in enumerate(itertools.izip(string_a,string_b)) if all(y==x[0] for y in x)]

In [38]: same
Out[38]: [0, 3, 4, 7]

ここでは、2 つの文字列を要素ごとに比較し、類似していることが判明したすべてのインデックスを返します。出力は、一致した文字などを含むように簡単に変更できます。この方法は、複数の単語を比較するために簡単に拡張できます。

于 2013-10-31T23:10:17.103 に答える
2

インデックスを反復処理する必要があります。

for i in range(len(string_a)):
    for j in range(len(string_b)):
        if string_a[i] == string_b[j]:
            same.append((i, j, string_b[j]))

これにより、次のようなタプルのリストが作成されます。

[ (3, 0, "h"), ... ]
于 2013-10-31T21:47:26.027 に答える
2
def find_similarity(string_a, string_b):
    for ia, ca in enumerate(string_a):
        for ib, cb in enumerate(string_b):
            if ca == cb:
                return ia, ib, ca

最初の一致だけでなく、すべての一致が必要な場合は、returnステートメントをステートメントに置き換えてyield、結果を反復処理するか、単純に次のようにします。

matches = list(find_similarity(string_a, string_b))

後者の場合、次のようになります。

list(find_similarity(string_a, string_b))
=> [(3, 0, 'h'), (4, 1, 'o'), (5, 2, 'n')]
于 2013-10-31T21:51:02.630 に答える