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

对于这两个列表结构,我真的不明白你的目标。目前尚不清楚,我认为您无法从中获得适当的算法。

您说:“对于给定的文本,如果 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 回答
0

您需要在两个列表之间进行某种映射,否则您无法弄清楚用什么替换什么。你可以使用字典:

t = 'The frnt tyre'

words = {
    'front': ('frnt', 'frt'),
}

for word, repl in words.items():
    for r in repl:
        t = t.replace(r, word)

print t

结果:

The front tyre
于 2013-06-06T12:49:00.713 回答
-1

我认为使用 sting.replace() 方法,(也许)将替换您不想替换的子字符串,如@oleg 所示

我知道这不是更清洁的方法,但也许使用字典和 .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()s 很容易解决

于 2013-06-06T13:32:59.267 回答