替换字符组合

2023-12-12

我有一根绳子27AAGCB5913L2ZF。如果有任何一个A or J or K出现在字符串中,那么我需要将它们更改为这三个字母的所有可能组合。如果我将上面的字符串输入传递给程序,那么输出应该是这样的

27AAGCB5913L2ZF
27AJGCB5913L2ZF
27AKGCB5913L2ZF
27JAGCB5913L2ZF
27KAGCB5913L2ZF
27KJGCB5913L2ZF
27JKGCB5913L2ZF
27JJGCB5913L2ZF
27KKGCB5913L2ZF

这些字母可能出现在字符串中的任何位置。如果只存在一个字母,则必须将其替换为A, J and K反过来。例如字符串的输出27ABGCB5913L2ZF应该如下

27ABGCB5913L2ZF
27JBGCB5913L2ZF
27kBGCB5913L2ZF

我可以用这样的代码搜索给定的字符

while ( $string =~ /(B)/g ) {
    say $1, ' at ', pos $string;
}

如果有任意数量的字符串,我怎样才能生成所有可能的字符串A, J, or K在任何职位?


您想要的关键字母组合的集合A, J, and K被称为笛卡尔积。 在Python中,你可以使用itertools.product来生成它们。

首先,我们需要找到输入字符串中所有关键字母的位置。最简单的方法是使用内置的enumerate功能。一旦我知道这些位置以及字符串包含多少个关键字母,我们就可以生成笛卡尔积的每一项,替换关键字母,并打印新字符串。

在 Python 中,字符串是不可变的(它们无法更改),因此我将字符串转换为字符列表,替换关键位置中的字符,然后使用str.join method.

以下代码适用于 Python 2 和 3 版本

Python

from itertools import product

def make_patterns(s):

    keyletters = 'AJK'

    # Convert input string into a list so we can easily substitute letters
    seq = list(s)

    # Find indices of key letters in seq
    indices = [ i for i, c in enumerate(seq) if c in keyletters ]

    # Generate key letter combinations & place them into the list
    for t in product(keyletters, repeat=len(indices)):
        for i, c in zip(indices, t):
            seq[i] = c
        print(''.join(seq))

# Test

data = (
    '1ABC2',
    '27AAGCB5913L2ZF',
    '3A4J',
    '5K67KA',
)

for s in data:
    print('\nInput:', s)
    make_patterns(s)

output

Input: 1ABC2
1ABC2
1JBC2
1KBC2

Input: 27AAGCB5913L2ZF
27AAGCB5913L2ZF
27AJGCB5913L2ZF
27AKGCB5913L2ZF
27JAGCB5913L2ZF
27JJGCB5913L2ZF
27JKGCB5913L2ZF
27KAGCB5913L2ZF
27KJGCB5913L2ZF
27KKGCB5913L2ZF

Input: 3A4J
3A4A
3A4J
3A4K
3J4A
3J4J
3J4K
3K4A
3K4J
3K4K

Input: 5K67KA
5A67AA
5A67AJ
5A67AK
5A67JA
5A67JJ
5A67JK
5A67KA
5A67KJ
5A67KK
5J67AA
5J67AJ
5J67AK
5J67JA
5J67JJ
5J67JK
5J67KA
5J67KJ
5J67KK
5K67AA
5K67AJ
5K67AK
5K67JA
5K67JJ
5K67JK
5K67KA
5K67KJ
5K67KK

通过微小的改变,我们可以将我们的函数变成一个生成器。这使您可以轻松地循环输出字符串,或者根据需要将它们转换为列表。

Python

from itertools import product

def make_patterns(s):

    keyletters = 'AJK'

    # Convert input string into a list so we can easily substitute letters
    seq = list(s)

    # Find indices of key letters in seq
    indices = [i for i, c in enumerate(seq) if c in keyletters]

    # Generate key letter combinations & place them into the list
    for t in product(keyletters, repeat=len(indices)):
        for i, c in zip(indices, t):
            seq[i] = c
        yield ''.join(seq)

# Test

print(list(make_patterns('A12K')))

for s in make_patterns('3KJ4'):
    print(s)

output

['A12A', 'A12J', 'A12K', 'J12A', 'J12J', 'J12K', 'K12A', 'K12J', 'K12K']
3AA4
3AJ4
3AK4
3JA4
3JJ4
3JK4
3KA4
3KJ4
3KK4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

替换字符组合 的相关文章

随机推荐

  • Scala 未来应用程序在完成之前终止

    只是试图让我的第一个 future 使用并运行 并进行类似于 Akka in Action MEAP 书中概述的示例的测试 我想调用一个网络服务并在将来返回结果 我正在使用 scalaxb 访问 Web 服务 我已经概述了下面的代码 但是当
  • 使用 Twilio SMS API,我可以在一篇文章中指定多个目标电话吗?

    Twilio 将长代码 SMS 限制为 1 次 秒 为了提高吞吐量 我将批次分成 5 个电话号码 我发现 Twilio API 的每个 HTTP POST 大约需要 0 5 秒 人们可能会认为使用 5 个 twilio 电话号码向 1000
  • 用于嵌套 Div 标签的 PHP 正则表达式

    我需要一个可以与 PHP 的 preg match all 一起使用的正则表达式来匹配 div 标签内的内容 div 看起来像这样 div Content div 到目前为止 我已经想出了这个正则表达式 它匹配所有 id t number
  • 如何计算firebase实时数据库中的键数

    如何在 firebase 函数的帮助下计算键的数量 在上面的情况下有 3 个 我正在使用 firebase 实时数据库 Firebase 实时数据库没有单独的计数操作 您必须下载父节点的整个快照 geoTag 然后计算应用程序代码中的子级数
  • C# - Json POST 请求已发送,但 PHP 服务器未收到

    我正在从 C Windows 表单应用程序向 OpenShift Red Hat 上托管的 PHP 服务器发送 HTTP 请求 我正在使用 POST 方法和 Json 数据 问题是 数据似乎已正确发送 我在wireshark中看到数据包 p
  • 如何将jax-ws服务部署到eclipse或tomcat?

    作为一名 Web 服务初学者 我已经尝试了 2 周来获得一个与 Maven Eclipse 和 Tomcat 一起使用的 hello World Web 服务 我放弃了让任何代码 wsdl 生成器工作的尝试 我遵循了本教程http myar
  • 猫鼬鉴别器在数据库中有何帮助? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 你好 我正在学习 mongodb 我了解了 mongoose 中的鉴别器 我试图从文档方面理解它 但不太理解 任何人都可以用更好的方式解释吗 谢谢 举个例子 您的项目有两个角色
  • 图像和其他 div 彼此相邻的 Div 容器 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我正在尝试绘制一个容器 其中包含左侧的图像 缩略图 和图像旁边的几个 div 垂直 在容
  • 检查多维数组中是否存在特定的数组键 - PHP

    我有一个多维数组 例如 这可能有很多层次 array Array 21 gt Array 24 gt Array 22 gt Array 25 gt Array 26 gt Array 我试图循环它以查看某个键是否存在 keySearch
  • NVD3 中的 ScatterChart – 从 csv 文件读取数据

    我正在尝试从 csv 文件读取数据 并希望使用 NVD3 中的 scatterChart 来可视化该数据 我会链接到 JSfiddle 或类似的东西 但我不知道如何在这些在线 JavaScript IDE 中包含 csv 文件 那可能吗 c
  • 分割字符串,然后显示没有最后一个的所有项目

    我有 例如 字符串let abc Jonny Name 所以如果我想检查 这是不是名字 我会检查 let isName abc split 1 isName Name your name is abc split 0 not name 但我
  • 同一服务器上的多个 Mongodb 实例

    我正在使用 Mongo DB 但我是它的新手 我准备将它安装在专门用于 Mongo 的服务器上 我想创建它的 2 个实例 1 个用于支持 QA 环境 另一个用于支持临时环境 我更熟悉 SQL Server 我可以在其中创建多个实例 是否可以
  • 在 CLI 中生成随机 BMP

    我需要一个真正随机的 BMP 来测试各种有损图像压缩算法 理想情况下 这不会依赖于任何库并在 Linux CLI 中运行 它应该生成一个随机的 BMP 给定一定的width and height 更新答案 2021 年 4 月 以下是关于随
  • 如何使用 LWP::Simple 处理代理服务器?

    如何向该脚本添加代理支持 use LWP Simple url http stackoverflow com word how to ask content get url if content m word print Found wor
  • 如何从电子表格公式调用库函数作为自定义函数?

    这可能是与以下相同的根本原因如何从同一库生成的电子表格下拉菜单中调用库函数 但我仍然想把它扔掉 以防出现新的情况或情况有所不同 问题是我想将所有自定义函数保留在一个库中 然后将该库添加到任何给定的电子表格中 并能够从单元格公式中引用它们 在
  • iOS UICollectionView:具有交替网格对齐方式的圆形视图的单元格

    我正在尝试实施UICollectionView用于圆形的自定义单元格 现在 默认情况下 圆的对齐方式与普通方形单元格相同 顶部圆和底部圆位于同一垂直线上 如何将对齐更改为 顶部圆和其下面的两个圆形成等边三角形 顶部圆和底部圆的位置按半径长度
  • 使用 React Route 部署到 S3 后看到空白页面

    我使用 React 和 React Router 构建了 SPA 我也在用https github com facebookincubator create react app因为它是一个非常简单的应用程序 当我使用 webpack 进行开
  • Java - 使用 ImageIO 进行多线程处理

    我有一个程序加载缓慢 我猜这是由于我一开始必须加载的图像资源量所致 我认为多线程会有所帮助 但现在我不太确定 这是我的自动多线程方法 private static Thread t private static int currentThr
  • 为什么 printf 在终端中显示额外的 % 字符?

    我开始学习用 C 语言编写代码 我写了以下程序 include
  • 替换字符组合

    我有一根绳子27AAGCB5913L2ZF 如果有任何一个A or J or K出现在字符串中 那么我需要将它们更改为这三个字母的所有可能组合 如果我将上面的字符串输入传递给程序 那么输出应该是这样的 27AAGCB5913L2ZF 27A