python - 如何在 Python 的循环中为变量创建字母级数?

标签 python

我试图在循环的每次迭代中将变量 (lett) 更改为字母表中的下一个字母。我还必须能够在脚本的开头将此变量设置为某个字母(首字母会因脚本的使用而异)。我开始创建以下代码:

初始脚本(我还在学习的时候):

while lett_trig == 2:
    if set_lett == 2:
        lett = "a"
    if set_lett == 3:
        lett = "b"
    if set_lett == 4:
        lett = "c"
    if set_lett == 5:
        lett = "d"
    if set_lett == 6:
        lett = "e"
    if set_lett == 7:
        lett = "f"
    if set_lett == 8:
        lett = "g"
    if set_lett == 9:
        lett = "h"
#... and this goes on till it reaches if set_let == 27: lett = "z"

    set_lett += 1
    if set_lett == 28:
        set_lett = 2
    print lett

# set_lett starts at two because I left set_lett == 1 to create a space (" ")

这当然是对较大脚本的简化。 这是我唯一能想到的简化方法:

lett_trig = 2
x = 0

a = ["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"]

while lett_trig == 2:
    lett = a[x]
    x += 1
    if x == 26:
        x = 0

是否有任何其他方法可以从数学上将一个字母更改为另一个字母?通过一些二进制转换操作?还是列表方式最有效?


答案:在查看所有答案并测试它们的效率后,我发现 dict 函数是最快的(也是最干净的)。代码示例:

import string

letter_map = dict(zip(string.ascii_lowercase, string.ascii_lowercase[1:] + string.ascii_lowercase[0]))
lett1 = "d"

while ord(lett2) < 122:
    print lett1
    lett1 = letter_map[lett1]

最佳答案

使用itertools.cycle:

import itertools
import string
letters = itertools.cycle(string.lowercase)

由此,letters 是无限的字母序列,从 a 到 z 重复运行。您可以通过调用 letters.next()while 循环中使用它,或者通过以某种方式强加终止条件在 for 循环中使用它,例如,itertools.islice

你可以把它放在一个函数中:

def cyclic_letters(start='a'):
    i = string.lowercase.index(start)
    letts = string.lowercase[i:] + string.lowercase[:i]
    return itertools.cycle(letts)

cyclic_letters 函数还允许选择序列中的首字母,默认为 'a'

或者,您可以使用字典来显示任何给定字母的下一个字母。您可以为此创建字典,例如:

letter_map = dict(zip(string.lowercase, string.lowercase[1:] + string.lowercase[0]))

这只是一个字典,因此使用例如 letter_map['c'] 将生成 'd'

在上面,string.lowercase 只是一个包含小写字母的字符串。该值将取决于您的语言环境。如果您只需要 'abcdefghijklmnopqrstuvwxyz',无论语言环境如何,您都可以替换 string.ascii_lowercase 或只给出显式字符串。

关于python - 如何在 Python 的循环中为变量创建字母级数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8296736/

相关文章:

python - 在运行时更改 python 日志级别

python - 乘法中如何计算进位?

Python 和 C++ 为 -1/2 返回不同的值

python - 简单的python日志记录配置中的重复输出

python - 从环境变量复制文本并粘贴到 Selenium (Python)

python - 超出最大递归深度

python - 将字符串类型、三级MultiIndex的pandas dataframe转换为数字类型对象

python - Python中+(pos)一元运算符的目的是什么?

python - 使用 django-allauth

python - 使用 Flask 和 WTForms 时出现 csrf_token 问题