我对 Python 还很陌生,正在学习编程中更基本的东西。 现在我正在尝试创建一个函数来复制一组不同名称的数字。
示例:
def expand('d3f4e2')
>dddffffee
我不知道如何为此编写函数。 基本上我知道你想将字母变量乘以它旁边的数字变量。
最佳答案
任何解决方案的关键是将事物分割成要重复的字符串对,并重复计数,然后以锁步方式迭代这些字符串对。
如果您只需要单字符字符串和一位数字重复计数,这只是将字符串分解为 2 个字符对,您可以使用 mshsayem 的答案或使用切片 (s[::2]
是字符串,s[1::2]
是计数)。
但是如果您想将其推广到多字母字符串和多数字计数怎么办?
好吧,我们需要以某种方式将字符串分组为数字和非数字。如果我们能做到这一点,我们就可以使用这些组对,就像 mshsayem 的答案使用字符对一样。
事实证明我们可以很容易地做到这一点。标准库中有一个漂亮的函数,名为 groupby
这使您可以根据任何功能将任何内容分组到运行中。还有一个函数isdigit
区分数字和非数字。
所以,这让我们得到了我们想要的运行:
>>> import itertools
>>> s = 'd13fx4e2'
>>> [''.join(group) for (key, group) in itertools.groupby(s, str.isdigit)]
['d', '13', 'ff', '4', 'e', '2']
现在我们以与 mshsayem 压缩字符相同的方式压缩它:
>>> groups = (''.join(group) for (key, group) in itertools.groupby(s, str.isdigit))
>>> ''.join(c*int(d) for (c, d) in zip(groups, groups))
'dddddddddddddfxfxfxfxee'
所以:
def expand(s):
groups = (''.join(group) for (key, group) in itertools.groupby(s, str.isdigit))
return ''.join(c*int(d) for (c, d) in zip(groups, groups))
关于Python:用整数扩展变量字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26006949/