Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 遍历长度未知的数字的字母_Python_Python 2.7 - Fatal编程技术网

Python 遍历长度未知的数字的字母

Python 遍历长度未知的数字的字母,python,python-2.7,Python,Python 2.7,好的。。。我需要遍历任意长度的字符串。因为我不知道怎么解释,我的意思是: def zip(string1,string1): ... 当使用“a”和“ad”调用时,它将返回一个列表: >>>zip("a","ad") ["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","aa","ab","ac","ad"]

好的。。。我需要遍历任意长度的字符串。因为我不知道怎么解释,我的意思是:

def zip(string1,string1):
    ...
当使用
“a”
“ad”
调用时,它将返回一个列表:

>>>zip("a","ad")
["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","aa","ab","ac","ad"]

我尝试过使用
map(chr,range(ord('a'),ord('nb')+1))
,但我得到
TypeError:ord()应该是一个字符,但找到了长度为2的字符串,我不知道从这里走到哪里。有什么想法吗?

这是一个base-26数字系统,下面是我如何解决它的。而且
zip
是一个python内置函数,最好不要重新定义它

def alphaToNumber(s):
    r = 0
    for x in s:
        r *= 26
        r += ord(x) - 96
    return r

def numberToAlpha(n, result):
    head = (n - 1) // 26
    tail = chr((n - 1) % 26 + 97)
    if head == 0:
        return tail + result
    else:
        return numberToAlpha(head, tail + result)

def gen(start, end):
    start_n = alphaToNumber(start)
    end_n = alphaToNumber(end)
    return [numberToAlpha(x, "") for x in range(start_n, end_n + 1)]

print(gen("a", "ad"))

# ['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', 'aa', 'ab', 'ac', 'ad']

这是一个base-26数字系统,下面是我将如何解决它。而且
zip
是一个python内置函数,最好不要重新定义它

def alphaToNumber(s):
    r = 0
    for x in s:
        r *= 26
        r += ord(x) - 96
    return r

def numberToAlpha(n, result):
    head = (n - 1) // 26
    tail = chr((n - 1) % 26 + 97)
    if head == 0:
        return tail + result
    else:
        return numberToAlpha(head, tail + result)

def gen(start, end):
    start_n = alphaToNumber(start)
    end_n = alphaToNumber(end)
    return [numberToAlpha(x, "") for x in range(start_n, end_n + 1)]

print(gen("a", "ad"))

# ['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', 'aa', 'ab', 'ac', 'ad']
就是这样:

def zip_(start, end):
    def __inc(s):
        if not s:
            return "a"
        elif s[-1] != "z":
            return s[:-1] + chr(ord(s[-1]) + 1)
        else:
            return __inc(s[:-1]) + "a"

    s = start

    yield s
    while s != end:
        s = __inc(s)
        yield s


print list(zip_("a", "ad"))
几点意见:

  • 不要使用
    zip
    作为变量或函数的名称,因为它已经被保留
  • 在解决方案中,
    zip
    是一个生成器。我这样做是为了不在内存中保存太多数据。如果您需要一个精确的列表,只需像我在print语句中所做的那样转换它
  • 如果参数错误,函数可能会进入无限循环。例如,如果您调用
    zip(“b”,“a”)
    。但实际上,如果有必要的话,可以通过添加几行来轻松修复
  • 就是这样:

    def zip_(start, end):
        def __inc(s):
            if not s:
                return "a"
            elif s[-1] != "z":
                return s[:-1] + chr(ord(s[-1]) + 1)
            else:
                return __inc(s[:-1]) + "a"
    
        s = start
    
        yield s
        while s != end:
            s = __inc(s)
            yield s
    
    
    print list(zip_("a", "ad"))
    
    几点意见:

  • 不要使用
    zip
    作为变量或函数的名称,因为它已经被保留
  • 在解决方案中,
    zip
    是一个生成器。我这样做是为了不在内存中保存太多数据。如果您需要一个精确的列表,只需像我在print语句中所做的那样转换它
  • 如果参数错误,函数可能会进入无限循环。例如,如果您调用
    zip(“b”,“a”)
    。但实际上,如果有必要的话,可以通过添加几行来轻松修复

  • 一开始我有点困惑,因为zip是一个实际的python方法。一开始我有点困惑,因为zip是一个实际的python方法。谢谢!这是完美的工作,我喜欢它是一个发电机太!谢谢这是完美的工作,我喜欢它是一个发电机太!