通过未知长度的数字迭代

时间:2016-12-24 01:02:31

标签: 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"]

我尝试使用map(chr,range(ord('a'),ord('nb')+1)),但我得到了TypeError: ord() expected a character, but string of length 2 found,我不知道从哪里开始。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

那就是:

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"))

一些评论:

  1. 不要使用zip这个词作为变量或函数的名称,因为它已经被保留了。
  2. 在解决方案zip_中是一个生成器。我这样做是为了不在内存中保留太多数据。如果您需要一个确切的列表,只需将其转换为我在print-statement中完成的。
  3. 如果参数错误,函数可能会进入无限循环。例如,如果您致电zip_("b", "a")。但实际上,如果有必要,可以通过添加几行来轻松修复。

答案 1 :(得分:1)

这是一个基数为26的数字系统,以下是我将如何解决它。而function getHostElement(el) { while (el.parentNode) el = el.parentNode; return getShadowRoot(el).host; } var element1 = document.createElement('element1'); var element2 = document.createElement('element2'); var element3 = document.createElement('element3'); element2.appendChild(element3); var shadowRoot = element1.createShadowRoot(); shadowRoot.appendChild(element2); getHostElement(element3); // element1 也是一个python内置函数,最好不要重新定义它。

zip