生成所有可能的三个字母的字符串的最佳方法是什么?[重复]

2025-03-05 09:15:00
admin
原创
58
摘要:问题描述:我正在生成所有可能的三个字母的关键字,e.g. aaa, aab, aac.... zzy, zzz下面是我的代码:alphabets = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',...

问题描述:

我正在生成所有可能的三个字母的关键字,e.g. aaa, aab, aac.... zzy, zzz下面是我的代码:

alphabets = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

keywords = []
for alpha1 in alphabets:
    for alpha2 in alphabets:
        for alpha3 in alphabets:
            keywords.append(alpha1+alpha2+alpha3)

是否可以以更简洁、更高效的方式实现此功能?


解决方案 1:

keywords = itertools.product(alphabets, repeat = 3)

请参阅文档itertools.product。如果您需要字符串列表,只需使用

keywords = [''.join(i) for i in itertools.product(alphabets, repeat = 3)]

alphabets也不需要是一个列表,它可以只是一个字符串,例如:

from itertools import product
from string import ascii_lowercase
keywords = [''.join(i) for i in product(ascii_lowercase, repeat = 3)]

如果您只想要小写的 ASCII 字母,则可以。

解决方案 2:

您也可以使用 map 代替列表推导(这是 map 仍然比 LC 更快的情况之一)

>>> from itertools import product
>>> from string import ascii_lowercase
>>> keywords = map(''.join, product(ascii_lowercase, repeat=3))

这种列表推导的变体也比使用''.join

>>> keywords = [a+b+c for a,b,c in product(ascii_lowercase, repeat=3)]

解决方案 3:

from itertools import combinations_with_replacement

alphabets = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

for (a,b,c) in combinations_with_replacement(alphabets, 3):
    print a+b+c

解决方案 4:

您也可以通过简单的计算来实现此目的,无需任何外部模块。

PermutationIterator就是您要搜索的内容。

def permutation_atindex(_int, _set, length):
    """
    Return the permutation at index '_int' for itemgetter '_set'
    with length 'length'.
    """
    items = []
    strLength = len(_set)
    index = _int % strLength
    items.append(_set[index])

    for n in xrange(1,length, 1):
        _int //= strLength
        index = _int % strLength
        items.append(_set[index])

    return items

class PermutationIterator:
    """
    A class that can iterate over possible permuations
    of the given 'iterable' and 'length' argument.
    """

    def __init__(self, iterable, length):
        self.length = length
        self.current = 0
        self.max = len(iterable) ** length
        self.iterable = iterable

    def __iter__(self):
        return self

    def __next__(self):
        if self.current >= self.max:
            raise StopIteration

        try:
            return permutation_atindex(self.current, self.iterable, self.length)
        finally:
            self.current   += 1

给它一个可迭代对象和一个整数作为输出长度。

from string import ascii_lowercase

for e in PermutationIterator(ascii_lowercase, 3):
    print "".join(e)

这将从“aaa”开始,以“zzz”结束。

解决方案 5:

chars = range(ord('a'), ord('z')+1);
print [chr(a) + chr(b) +chr(c) for a in chars for b in chars for c in chars]

解决方案 6:

我们可以不使用 itertools 而是利用两个函数定义来解决这个问题:

def combos(alphas, k):
    l = len(alphas)
    kRecur(alphas, "", l, k)

def KRecur(alphas, prfx, l, k):
    if k==0:
        print(prfx)
    else:
        for i in range(l):
            newPrfx = prfx + alphas[i]
            KRecur(alphas, newPrfx, l, k-1)

它使用两个函数来避免重置 alpha 的长度,第二个函数自我迭代直到达到 ak 0 以返回该 i 循环的 k-mer。

采纳自 Abhinav Ramana 在 Geeks4Geeks 上的解决方案

解决方案 7:

好吧,我在思考如何涵盖该主题时想到了这个解决方案:

import random

s = "aei"
b = []
lenght=len(s)
for _ in range(10):
    for _ in range(length):
        password = ("".join(random.sample(s,length)))
        if password not in b:
            b.append("".join(password))
print(b)
print(len(b))

请让我描述一下里面发生的事情:

  1. 导入随机,

  2. 创建一个包含我们想要使用的字母的字符串

  3. 创建一个空列表,我们将用它来放置我们的组合

  4. 现在我们使用范围(我输入了 10,但是对于 3 位数字来说可以更小)

  5. 接下来使用带有列表和列表长度的 random.sample 我们创建字母组合并将其连接起来。

  6. 在接下来的步骤中,我们将检查 b 列表中是否有该组合 - 如果有,则不会将其添加到 b 列表中。如果当前组合不在列表中,我们将把它添加到列表中。(我们正在比较最终加入的组合)。

  7. 最后一步是打印包含所有组合的列表 b,并打印可能的组合数。也许这不是最清晰和最有效的代码,但我认为它有效...

解决方案 8:

print([a+b+c for a in alphabets for b in alphabets for c in alphabets if a !=b and b!=c and c!= a])

这将删除一个字符串中的重复字符

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2766  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1694  
  在全球化的浪潮下,企业的业务范围不断拓展,跨文化协作变得愈发普遍。不同文化背景的团队成员在合作过程中,由于语言、价值观、工作习惯等方面的差异,往往会面临诸多沟通挑战。而产品生命周期管理(PLM)系统作为企业管理产品全生命周期的重要工具,如何有效支持跨文化协作成为了关键问题。通过合理运用沟通策略,PLM系统能够在跨文化团...
plm是什么软件   22  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色,其中文档版本控制是确保产品数据准确性、完整性和可追溯性的关键环节。有效的文档版本控制能够避免因版本混乱导致的错误、重复工作以及沟通不畅等问题,提升企业整体的运营效率和产品质量。接下来,我们将深入探讨 PLM 系统实现文档版本控制的 6...
plm是什么意思   25  
  PLM(产品生命周期管理)项目管理旨在通过有效整合流程、数据和人员,优化产品从概念到退役的整个生命周期。在这个过程中,敏捷测试成为确保产品质量、加速交付的关键环节。敏捷测试强调快速反馈、持续改进以及与开发的紧密协作,对传统的测试流程提出了新的挑战与机遇。通过对测试流程的优化,能够更好地适应PLM项目的动态变化,提升产品...
plm管理系统   25  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用