基于 Python 中另一个字符串的字符串生成

阿德里安·格日瓦切夫斯基

我想创建一个简单的字符串生成器,这是它的工作原理

  1. 我声明一个 pattern_string = "abcdefghijklmnopqrstuvwxyz"
  2. 我的起始字符串可以说 starting_string = "qywtx"
  3. 现在我想生成如下字符串:
  4. starting_string根据模式字符串检查 my的最后一个字符
  5. 最后一个字符是x我们在 find it in 中找到这个字符pattern_string

    abcdefghijklmnopqrstuvw x yz

    并看到下一个字符是y我想要的输出qywty...

然而,当我到达Z,我想我的字符串来增加倒数第二个字符和最后一个字符集的第一个字符starting_pattern所以这将是qywra等等...

现在提问:

  • 我可以使用 REGEX 来实现吗?

  • 有没有已经处理过这种生成的库?

施沃巴塞尔

以下将根据您的描述生成下一个字符串。

def next(s, pat):
  l = len(s)
  for i in range(len(s) - 1, -1, -1):  # find the first non-'z' from the back
    if s[i] != pat[-1]:  # if you find it
      # leave everything before i as is, increment at i, reset rest to all 'a's
      return s[:i] + pat[pat.index(s[i]) + 1] + (l - i - 1) * pat[0]
  else:  # this is only reached for s == 'zzzzz'
    return (l + 1) * pat[0]  # and generates 'aaaaaa'  (just my assumption)

>>> import string
>>> pattern = string.ascii_lowercase  # 'abcde...xyz'
>>> s = 'qywtx'
>>> s = next(s, pattern)  # 'qywty'
>>> s = next(s, pattern)  # 'qywtz'
>>> s = next(s, pattern)  # 'qywua'
>>> s = next(s, pattern)  # 'qywub'

对于多个'z'到底:

>>> s = 'foozz'
>>> s = next(s, lower)  # 'fopaa'

对于所有 'z',从增加长度的 'a' 开始:

>>> s = 'zzz'
>>> s = next(s, lower)  # 'aaaa'

据我所知,没有库函数可以做到这一点。一个接近的是itertools.product

>>> from itertools import product
>>> list(map(''.join, product('abc', repeat=3)))
['aaa', 'aab', 'aac', 'aba', 'abb', 'abc', 'aca', 'acb', 'acc', 'baa', 
 'bab', 'bac', 'bba', 'bbb', 'bbc', 'bca', 'bcb', 'bcc', 'caa', 'cab',
 'cac', 'cba', 'cbb', 'cbc', 'cca', 'ccb', 'ccc']

但这不适用于任意起始字符串。这种行为可以通过将其与组合来模仿,itertools.dropwhile但是在开始字符串之前跳过所有组合会产生严重的开销(在字母表为 26 的情况下和接近末尾的开始字符串几乎使该方法无用):

>>> list(dropwhile(lambda s: s != 'bba', map(''.join, product('abc', repeat=3))))
['bba', 'bbb', 'bbc', 'bca', 'bcb', 'bcc', 'caa', 'cab', 'cac', 'cba', 'cbb', 'cbc', 'cca', 'ccb', 'ccc']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

python基于另一个字符串变量创建字符串变量(包含)

基于python中的另一个字符串从列表中提取字符串

检查Python列表项是否在另一个字符串中包含一个字符串

检查一个字符串是否在python中包含另一个字符串

Python:从列表中查找与另一个字符串最接近的字符串

在 Python 中计算另一个字符串中字符串的更好方法

在python中的另一个字符串元素之间更改字符串元素

如何基于另一个字符串的索引获取子字符串

基于另一个字符串标记一个字符串

如何基于PostgreSQL中JSON中的另一个字符串从JSON查询字符串?

在C编程中基于另一个字符串数组的单词从字符串数组中删除单词

如何在Python中将一个字符串附加到另一个字符串?

Python用另一个字符串替换字符串(大写或小写)

将字符串插入Python中另一个字符串的最后一个空白空间

Python-字符串是否包含另一个字符串中的所有字符?

如何检查集合中的字符串是否是python 2.7中另一个字符串的一部分?

从 Python 中的另一个字符串中删除第一次出现的字符串

Python:根据另一个字符串对相似字符串列表进行排序

Python:查找一个字符以检索要替换为另一个字符的字符串索引

与另一个字符串比较时,如何从Python字符串中提取唯一子字符串?

如何在不使用python中的find()方法的情况下在另一个字符串中查找字符串

如何在python中的另一个字符串中搜索带有空格的字符串?

如何基于另一个字符串的值获取表值?

如何检查给定的Python字符串是否是另一个字符串的子字符串?

根据存在另一个字符串在Python中提取字符串的子字符串

检查句子中是否存在某些字符串,并使用Python 3.6将其替换为另一个字符串

仅通过在python中插入将字符串转换为另一个字符串

根据python中另一个字符串元素的数量删除字符串元素

使用 python,我如何确定一个字符串是否包含除另一个列表中的字符之外的任何字符