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

Gro*_*onk 1 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 (" ")
Run Code Online (Sandbox Code Playgroud)

这当然是对更大脚本的简化. 这是我能想到的唯一简化:

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
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以在数学上从一个字母改为另一个字母?通过一些二进制转换操作?或列表方式最有效?


答:在完成所有答案并测试它们的效率后,我发现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]
Run Code Online (Sandbox Code Playgroud)

Mic*_*ber 8

用途itertools.cycle:

import itertools
import string
letters = itertools.cycle(string.lowercase)
Run Code Online (Sandbox Code Playgroud)

有了这个,letters是一个无限的字母序列,从a到z反复运行.您可以通过以某种方式强制终止条件while来调用letters.next()或循环使用它for,例如,itertools.islice.

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

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

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

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

letter_map = dict(zip(string.lowercase, string.lowercase[1:] + string.lowercase[0]))
Run Code Online (Sandbox Code Playgroud)

这只是一本字典,所以使用,例如,letter_map['c']将产生'd'.

在上面,string.lowercase只是一个包含小写字母的字符串.该值取决于您的区域设置.如果您只想要'abcdefghijklmnopqrstuvwxyz',无论语言环境如何,您都可以替换string.ascii_lowercase或只提供显式字符串.

  • 我也在使用Python 2.7.我从文档中获取`string.lowercase`的输出:`help(string)`.我的地方是俄罗斯人.我刚刚测试过,`string.lowercase`给出''abcdefghijklmnopqrstuvwxyz\x83\x90\x9a\x9c\x9d\x9e\x9f\xa2\xb3\xb4\xb5\xb8\xba\xbc\xbe\xbf\xe0\XE1\XE2\XE3\XE4\xe5\XE6\XE7\xe8\xe9\XEA\XEB\XEC \固定的\ XEE\XEF\XF0\XF1\XF2\XF3\XF4\XF5\XF6\XF7\XF8\xf9\XFA\xfb的\ XFC\xfd的\ XFE\xff'`.所以,如果需要`abcd ... xyz`,他们应该使用`string.ascii_lowercase`. (2认同)