Python:用整数扩展变量字符串

标签 python function integer

我对 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/

相关文章:

c++ - 如何减少将矩阵传递给函数的开销?

python - SymPy,如何强制浮点以防止 Cython nogil 上下文中的错误

字符串的 Python 百分比运算符不起作用

python - 扭曲和 Websockets : Beyond Echo

python - 更改极坐标投影子图的大小

java - 如何读取可能是 int 或 double 的输入?

c++ - 使用 sscanf 检索整数

python - Bash 是否在我的 python 命令行参数中扩展了 "*"字符?

python - 从类属性组合函数

c++ - 如何在 C++ 中将元素插入数组?