如何在Python中为循环中的变量创建字母进程?

2024-09-30 10:38:22 发布

您现在位置: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 (" ")

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

^{pr2}$

有没有其他方法可以从一个字母转换成另一个字母?通过一些二进制转换操作?还是列表方式最有效?在


答:在浏览了所有的答案并测试了它们的效率之后,我发现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]

Tags: 方法代码脚本stringif字母asciidict
3条回答

使用itertools.cycle

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

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

您可以将其组合成一个函数:

^{pr2}$

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

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

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

这只是一个字典,所以使用letter_map['c']将产生{}。在

在上面,string.lowercase只是一个包含小写字母的字符串。该值将取决于您的区域设置。如果您只想要'abcdefghijklmnopqrstuvwxyz',而不考虑区域设置,则可以用string.ascii_lowercase代替,或者只给出显式字符串。在

尝试一下

chr(x + ord("a"))

其中x是0到25范围内的整数。在

^{}返回字符的ASCII代码,^{}将ASCII代码再次转换为字符。在ASCII中,小写字母都是连续出现的(与EBCDIC相反,对于那些仍然记得的人)。在

idx = 0
while condition:
    lett = chr(idx + ord('a'))
    idx += 1
    if idx == 26:
        idx = 0

ordchr

相关问题 更多 >

    热门问题