擅长:python、mysql、java
<p>列表理解中的<code>if</code>仅用作筛选器,如下所示:</p>
<pre><code>[something for element in sequence if condition]
</code></pre>
<p>然后将该条件用作过滤器,从序列中过滤出不符合该条件的所有元素。你知道吗</p>
<p>如果要根据list元素更改列表中的项目,则需要调整<code>something</code>表达式。在这里,您可以使用三元表达式语法:</p>
<pre><code>something if condition else something_else
</code></pre>
<p>在您的例子中,您希望<em>添加一个</em>元素,或者<em>扩展一个</em>元素列表。这不可能直接实现,因此您必须选择一个共同点,即始终通过元素列表进行扩展。因此,必须将一个元素放入一个单元素列表中,然后可以再次循环:</p>
<pre><code>[ y for x in l for y in (expandStr(x) if isinstance(x, str) else [x]) ]
# ^^^^^^^^^^
# loop through the elements in l
#
# ^^^^^^^^^^^^ ^^^
# if x is a string, use the sequence that `expandStr` returns;
# otherwise just use a 1-element list with the original value
#
# ^^^^^
# loop through the sequence that is returned by the ternary expression
#
# ^
# and place that in the final result list
</code></pre>