擅长:python、mysql、java
<p>实际上,最好从传统的<code>for</code>循环开始,这样您就可以大致了解困难所在:</p>
<pre><code>mod_hostnames = []
for name in hostnames:
if name.startswith('p'):
r = [name + '_prd', name]
elif name.startswith('h'):
r = [name + '_uat', name]
else:
r = [name]
mod_hostnames.extend(r)
assert mod_hostnames == ['aa', 'bb', 'dd', 'pp_prd', 'pp', 'bb', 'zz', 'hh_uat', 'hh']
</code></pre>
<p>要创建一个理解列表,您需要转换<code>if</code>。。。<code>elif</code>。。。<code>else</code>语句在一行语句中使用。。。<code>if</code>。。。<code>else</code>。。。在</p>
<p>您可以按如下方式处理:</p>
^{pr2}$
<p>嗯,这有点棘手。在</p>
<p>要将这个循环转换为一个理解列表,您需要迭代<code>r</code>值。你会在理解列表中得到一个理解列表。在</p>
^{3}$
<p>哼!我觉得写一份理解清单太复杂了。谁会想调试它呢?在</p>
<p>对于可维护性,我建议使用一个小功能的解决方案:</p>
<pre><code>def modify(name):
if name.startswith('p'):
return [name + '_prd', name]
elif name.startswith('h'):
return [name + '_uat', name]
else:
return [name]
mod_hostnames = [item
for name in hostnames
for item in modify(name)]
</code></pre>
<p>在这里!在</p>