擅长:python、mysql、java
<p><a href="http://docs.python.org/library/itertools.html#itertools.groupby" rel="nofollow">^{<cd1>}</a>可以大大简化您的程序(=更少的错误)</p>
<pre><code>from itertools import groupby
import urllib
def find_three_double(words_file):
for word in words_file:
word = word.strip()
if sum(sum(1 for i in g) == 2 for k,g in groupby(word)) == 3:
print word
# Access the file containing the valid letters
words_url = "http://thinkpython.com/code/words.txt"
words_file = urllib.urlopen(words_url)
# Apply the actual test
find_three_double(words_file)
</code></pre>
<hr/>
<p>说明:</p>
<p>在生成器表达式中,我们看到<code>groupby(word)</code>。这将扫描单词并将两个字母聚集在一起。在</p>
<p><code>sum(1 for i in g)</code>应用于每个组。它相当于求群的长度。如果长度为2,则这是一个双字母,因此<code>sum(1 for i in g) == 2</code>的计算结果为<code>True</code></p>
<p>外部的<code>sum()</code>将所有的<code>True</code>和{<cd8>}的值相加,<code>True</code>被添加为<code>1</code>,而{<cd8>}则被添加为<code>0</code>。如果正好有3个<code>True</code>值,则会打印该单词</p>