Python-多次替换一个单词
问题: 我有一个例子,每次句子中的单词发生变化时,我都需要用Python-多次替换一个单词,python,Python,问题: 我有一个例子,每次句子中的单词发生变化时,我都需要用dc替换句子中的单词。这句话是: Sweet Bad No Long Yes Bike No Yes 在接下来的几次中,句子将不断变为: Sweet Bad No Long Yes Bike Yes No Sweet Bad No Short Yes Car Yes No 因此,输出应该如下所示: Sweet Bad No No dc Yes dc dc dc 我想用dc替换从第一句到下一句的第一个变更实例。我写了一段代码,但似乎不对。
dc
替换句子中的单词。这句话是:
Sweet Bad No Long Yes Bike No Yes
在接下来的几次中,句子将不断变为:
Sweet Bad No Long Yes Bike Yes No
Sweet Bad No Short Yes Car Yes No
因此,输出应该如下所示:
Sweet Bad No No dc Yes dc dc dc
我想用dc
替换从第一句到下一句的第一个变更实例。我写了一段代码,但似乎不对。我哪里做错了
dont_care = "dc"
hyp_curr = []
hyp_next = []
def create_hypothesis(stVal):
splitVal = stVal.split()
global hyp_curr
global hyp_next
if not hyp_curr:
hyp_curr = (' '.join(w for w in splitVal if w not in hyp_curr))
return hyp_curr
else:
hyp_next = splitVal
print hyp_curr
print hyp_next
for wordc in hyp_curr.split():
for wordn in hyp_next:
if hash(wordc) != hash(wordn):
hyp_curr = hyp_curr.replace(wordn,dont_care)
return hyp_curr
或:
也许是这样
#!/usr/local/cpython-3.3/bin/python
import pprint
def rep_dc(list_):
result = []
for sublist1, sublist2 in zip(list_[:-1], list_[1:]):
assert len(sublist1) == len(sublist2)
for tuple_ in zip(*list_):
set_ = set(tuple_)
if len(set_) > 1:
result.append('dc')
else:
result.append(tuple_[0])
return result
def main():
list1 = 'Sweet Bad No No Long Yes Bike No Yes'.split()
list2 = 'Sweet Bad No No Long Yes Bike Yes No'.split()
list3 = 'Sweet Bad No No Short Yes Car Yes No'.split()
master_list = [ list1, list2, list3 ]
pprint.pprint(master_list)
result = rep_dc(master_list)
print(result)
result_string = ' '.join(result)
print(result_string)
main()
FWIW,您将hyp_curr初始化为列表,但将其用作字符串,这令人困惑。你似乎也不需要hyp_next来实现全球化。你也不需要hyp_curr是全球性的-你最好每次都把它作为第二个参数传递出去。@GreenAsJade是的,我正要这么做。:)回答得很好。我以前没想过用拉链!如果上面提到的程序中有不止一行这样的代码,您可能会在列表中添加所有行,比如说
lAll
。然后可以使用zip(map(lambda m:m.split(),lAll))
压缩列表中的所有元素。最后,可以使用lambda x:x[1::==x[:-1]
检查列表的所有元素是否相同。
>>> [x[0]==x[1] and x[0] or 'dc' for x in zip(s.split(), s1.split())]
['Sweet', 'Bad', 'No', 'No', 'Long', 'Yes', 'Bike', 'dc', 'dc']
#!/usr/local/cpython-3.3/bin/python
import pprint
def rep_dc(list_):
result = []
for sublist1, sublist2 in zip(list_[:-1], list_[1:]):
assert len(sublist1) == len(sublist2)
for tuple_ in zip(*list_):
set_ = set(tuple_)
if len(set_) > 1:
result.append('dc')
else:
result.append(tuple_[0])
return result
def main():
list1 = 'Sweet Bad No No Long Yes Bike No Yes'.split()
list2 = 'Sweet Bad No No Long Yes Bike Yes No'.split()
list3 = 'Sweet Bad No No Short Yes Car Yes No'.split()
master_list = [ list1, list2, list3 ]
pprint.pprint(master_list)
result = rep_dc(master_list)
print(result)
result_string = ' '.join(result)
print(result_string)
main()