position_list = ['front', 'frnt', 'ft', 'back', 'bck', 'behind', 'right', 'rhs']
position = ['down', 'right', 'inner', 'front', 'top', 'back', 'left']
这是我在PYTHON工作的两个列表。 对于给定的文本,如果出现position_list中的任何单词,则必须将其替换为位置中的特定单词。
即文字是:“轮胎和轮胎的轮胎磨损了”
'frnt'和'bck'必须分别用'front'和'back'替换。
我使用的python代码是:
if wrong == 'frnt' or wrong == 'ft':
str = str.replace(错误,'前')
if wrong == 'bck' or wrong == 'behind':
str = str.replace(错误,'回')
但我正在寻找使用这些列表直接替换单词的python代码。
答案 0 :(得分:1)
我真的没有得到这两个列表结构的标题。目前还不清楚,我认为你不能从中获得适当的算法。
你说:“对于给定的文本,如果出现position_list中的任何单词,则必须用位置中的特定单词替换”,这意味着' front '必须替换为' down ',' frnt 'by' 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)
换句话说,尝试避免创建最终导致算法处理列表索引的结构......
答案 1 :(得分:0)
您需要在两个列表之间进行某种映射,否则您无法弄清楚要用什么替换。你可以用dict:
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
答案 2 :(得分:-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来解决它