好的...我需要遍历任意长度的字符串。由于我不知道如何解释这个太好,我的意思是这样的:
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一个字符,但找到长度为 2 的字符串,我不知道从这里去哪里。有什么想法吗?
请您参考如下方法:
就是这样:
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_是一个生成器。我这样做是为了不在内存中保留太多数据。如果您需要一个确切的列表,只需像我在打印语句中所做的那样转换它。 - 如果参数错误,函数可能会进入无限循环。例如,如果您调用
zip_("b", "a")。但实际上,如有必要,只需添加几行即可轻松修复。
