1
position_list = ['front', 'frnt', 'ft', 'back', 'bck', 'behind', 'right', 'rhs']

position = ['down', 'right', 'inner', 'front', 'top', 'back', 'left']

These are the two lists I'm working on in PYTHON. For a given text if any of the words in position_list occurs, it must be replaced with specific words in position.

i.e text is : "The frnt tyre and bck tyre are worn out"

The 'frnt' and 'bck' must be replaced with 'front' and 'back' respectively.

The python code I used is:

if wrong == 'frnt' or wrong == 'ft':

str = str.replace(wrong,'front')

if wrong == 'bck' or wrong == 'behind':

str = str.replace(wrong,'back')

But I'm looking for python codes which directly replaces words using these lists.

4

3 に答える 3

1

この 2 つのリスト構造では、どこに向かっているのかよくわかりません。それは不明確であり、そこから適切なアルゴリズムを取得できるとは思いません。

あなたは言う:「特定のテキストについて、position_list の単語のいずれかが発生した場合、それは position の特定の単語に置き換える必要があります」、つまり、' front ' を ' down ' に、' frnt ' を ' right 'に置き換える必要があるそして ' rhs ' には代わりがありません。それは意味がありません!

したがって、質問の残りの部分から、「front」に続く単語を「front に置き換え、 「 back 」に続く単語を「back」に置き換える必要があると思います。しかし、その場合、どの単語が置換され、どの単語が置換されるかをアルゴリズムが知るのに役立つ情報はありません。

したがって、唯一の解決策は、構造をより Pythonic な方法で変更して、簡単でエレガントなアルゴリズムを作成することです。次に、次のような構造を試してみてください。

position = ['front', 'back']
position_list = [('frnt', 'ft'), ('bck')]

アルゴリズムは次のようになります。

replaces = zip(position, position_list)
for new_word, old_words in replaces:
    for old_word in old_words:
        str = str.replace(old_word, new_word)

辞書を使用することもできます。

positions = {'front': ['frnt', 'ft'], 'back': ['bck']}
for new_word, old_words in positions.iteritems():
    for old_word in old_words:
        str = str.replace(old_word, new_word)

言い換えれば、リストのインデックスを扱うアルゴリズムを最終的に作成する構造を作成しないようにしてください...

于 2013-06-06T12:43:13.940 に答える
-1

@olegが示したように、sting.replace()メソッドで(おそらく)置き換えたくない部分文字列を置き換えると思います

これがよりクリーンな方法ではないことはわかっていますが、おそらく辞書と .split() および .join() を使用すると役立つでしょう。

s = 'the frt bck behind'
l = s.split()
new =[]
d ={'frt':'front','behind':'back','bck':'back'}
for word in l:
    if word in d:
        new.append(d[word])
    else:new.append(word)    
print " ".join(new)
>>> the front back back

大文字と小文字と句読点に問題があると思いますが、いくつかの string.replace() で簡単に解決できます

于 2013-06-06T13:32:59.267 に答える