擅长:python、mysql、java
<p>下面是一个使用列表理解和<code>re.sub</code>只保留元音的解决方案:</p>
<pre><code>import re
ids_even_vowels = [i['id']
for i in j if i['body']
if not len(re.sub('[^aeiouy]', '', i['body'], flags=re.I))%2==1
]
</code></pre>
<p>输出:</p>
<pre><code>[1, 3, 4, 5, 6, 7, 10, 12, 15, 16, 18, 20, 22, 24, 27, 31, 32, 33, 34, 35, 40, 45, 46, 48, 49, 50, 53, 55, 56, 57, 58, 61, 63, 65, 66, 67, 68, 73, 76, 78, 82, 84, 90, 92, 95, 96, 97, 99]
</code></pre>
<h3>如何计算元音:</h3>
<pre><code>>>> my_string = 'AbCDefGHI'
>>> re.sub('[^aeiouy]', '', my_string, flags=re.I)
'AeI' # vowels only
>>> len(re.sub('[^aeiouy]', '', my_string, flags=re.I))
3 # number of vowels
>>> len(re.sub('[^aeiouy]', '', my_string, flags=re.I))%2
1 # remainder of division by 2: 1 is odd, 0 is even
>>> not len(re.sub('[^aeiouy]', '', my_string, flags=re.I))%2
False # is it even?
</code></pre>