<p>一个使用<code>list comprehension</code>的单行程序。在</p>
<pre><code>[sent.replace(currentWord,newWord) if sent.find(currentWord)>=0 else sent.replace(newWord,currentWord) for sent in sentList]
</code></pre>
<p>所以</p>
^{pr2}$
<p>在这里,<code>if sent.find('math')>=0</code>将发现字符串是否包含<code>'math'</code>,如果是,则将其替换为<code>'cs'</code>,否则它将{<cd4>}替换为<code>'math'</code>。如果字符串既不包含,也将打印原始字符串,因为只有找到子字符串时,replace才起作用。在</p>
<hr/>
<p><strong>编辑:</strong>正如<a href="https://stackoverflow.com/questions/46420146/python-swapping-two-strings-within-a-list/46420532#comment79798458_46420532">@Rawing</a>指出的,上面的代码中有一些错误。所以这里有新的代码可以处理所有的情况。在</p>
<p>我已经使用<code>re.sub</code>来处理<strong>只有单词</strong>的替换,替换算法就是如何交换两个变量,比如<code>x</code>和{<cd9>},其中我们引入一个临时变量<code>t</code>来帮助交换:<code>t = x; x = y; y = t</code>。选择这种方法是因为我们必须同时进行多次替换。在</p>
<pre><code>from re import sub
for s in sentList:
#replace 'math' with '%math_temp%' in s (here '%math_temp%' is a dummy placeholder that we need to later substitute with 'cs')
temp1 = sub(r'\bmath\b','%math_temp%' , s)
#replace 'cs' with 'math' in temp1
temp2 = sub(r'\bcs\b','math', temp1)
#replace '%math_temp%' with 'cs' in temp2
s = sub('%math_temp%','cs', temp2)
print(s)
</code></pre>
<p>所以这次在一个更大的测试用例中,我们得到:</p>
<pre><code>IN : sentList = ['i like math', 'i am a cs expert', 'math cs', 'mathematics']
IN : currentWord = "math"
IN : newWord = "cs"
OUT : i like cs
i am a math expert
cs math
mathematics
</code></pre>