【问题标题】:Strings of two letters and fixed length两个字母和固定长度的字符串
【发布时间】:2016-04-13 00:29:49
【问题描述】:

我想知道如何在 Python 中生成所有可能的长度为 10 的两个字母字符串的列表。例如,列表如下:

aaaaaaaaaa
aaaaaaaaab
aaaaaaaaba
aaaaaaaabb
...
...
...
bbbbbbbbab
bbbbbbbbba
bbbbbbbbbb

另外,我知道我的问题可能是多么幼稚;我还在学习过程中。

【问题讨论】:

  • 一种简单的方法(除了使用现有的 python 工具,例如 itertools)也将它们视为二进制数:1 代表 b,0 代表 a。那么每个字符串就变成了一个数字的表示,要得到所有的字符串,你只需要遍历所有的数字。
  • 您的建议很难解释前导零。
  • @EdwardJiang:不是这样; Python 有str.zfillstr.rjuststr 填充到左侧给定的宽度,或者您可以使用format/str.format 来实现与单个操作类似的效果(而不是转换为@ 987654327@,然后将填充作为单独的步骤)。

标签: python string


【解决方案1】:
from itertools import product

prod = [''.join(p) for p in product('ab', repeat=10)]

或者如果您只想像示例中那样打印它:

from itertools import product

for p in product('ab', repeat=10):
    print(''.join(p))

itertools.productthe documentation

【讨论】:

    【解决方案2】:

    您可以从0 数到2**10-1,使用bin 转换这些数字并将0/1 替换为a/b。只需将左侧用 0 填充到右侧长度即可。

    【讨论】:

    • 感谢@Alfe!愚蠢的错字。
    【解决方案3】:
    def s(d):
      if d:
        for c in 'ab':
          for rest in s(d-1):
            yield c + rest
      else:
        yield ''
    
    print list(s(10))
    

    def x(d):
      return ([ 'a' + q for q in x(d-1) ] +
              [ 'b' + q for q in x(d-1) ]) if d else [ '' ]
    
    print x(10)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      相关资源
      最近更新 更多