<p>天真的方法(如果数字只有一个,字符也是一个):</p>
<pre><code>>>> def expand(s):
s = iter(s)
return "".join(c*int(d) for (c,d) in zip(s,s))
>>> expand("d3s5")
'dddsssss'
</code></pre>
<p>解释不当:</p>
<p>术语/功能:</p>
<ul>
<li><a href="https://docs.python.org/2/library/functions.html#iter" rel="nofollow noreferrer">^{<cd1>}</a>给你一个<a href="https://stackoverflow.com/questions/9884132/understanding-pythons-iterator-iterable-and-iteration-protocols-what-exact">iterator</a>对象。在</li>
<li><a href="https://docs.python.org/2/library/functions.html#zip" rel="nofollow noreferrer">^{<cd2>}</a>从iterables生成{a4}。在</li>
<li><a href="https://docs.python.org/2/library/functions.html#int" rel="nofollow noreferrer">^{<cd3>}</a>从字符串解析整数</li>
<li><code><expression> for <variable> in <iterable></code>是{a6}</li>
<li><a href="https://docs.python.org/2/library/stdtypes.html#str.join" rel="nofollow noreferrer">^{<cd5>}</a>用<code>string</code>连接iterable字符串</li>
</ul>
<p>流程:</p>
<ul>
<li>首先,我们对给定的字符串创建一个迭代器</li>
<li><code>zip()</code>用于生成字符和重复时间的元组。e、 g.<code>('d','3'), ('s','5)</code>(<code>zip()</code>)将调用iterable来生成元组。注意,对于每个元组,它将调用同一个iterable两次,因为我们的iterable是一个迭代器,这意味着它将前进两次)</li>
<li>现在<code>for in</code>将迭代元组。使用两个变量<code>(c,d)</code>将把元组解压到</li>
<li>但是<code>d</code>仍然是一个字符串。<code>int</code>正在使其成为整数</li>
<li><code><string> * integer</code>将重复<code>string</code>和{<cd16>}次</li>
<li>最后,<code>join</code>将返回结果</li>
</ul>
<p>以下是多位数、多字符版本:</p>
^{pr2}$
<p>顺便说一下,使用<a href="https://docs.python.org/2/library/itertools.html#itertools.groupby" rel="nofollow noreferrer">^{<cd18>}</a>更好,就像<a href="https://stackoverflow.com/questions/26006949/python-expanding-a-string-of-variables-with-integers#26007121">shown by abarnert</a>。在</p>