1

如何在“python”中找到所有在字典上大于 X 且小于 Y 的字符串?X 和 Y 的长度相同。

例子:

X = "ab" and Y = "ad"

所以答案将是:

"ab", "ac" and "ad"

我怎样才能做到这一点?

4

4 回答 4

0

我认为您正在寻找的答案是:

X = 'ab'
Y = 'ad'

x = [chr(x) + chr(y) for x in range(ord(X[0]),ord(Y[0])+1) for y in range(ord(X[1]),ord(Y[1])+1)]

print(x)
于 2015-03-29T06:51:29.617 回答
0

首先,让我们编写一个函数来查找当前字符串(长度相同,并且仅使用字符 az)之后按字典顺序排列的下一个字符串,即,将其递增。在大多数情况下,这很容易——只需增加最后一个字符。但是,如果最后一个字符是我们集合 (z) 中可能的最高字符,我们从 a 开始,并递增剩余的字符串。

def next(s):
    front = s[:-1]
    last = s[-1]
    if last < 'z':
        return front + chr(ord(last) + 1)
    else:
        return next(front) + 'a'

现在我们可以使用它来打印给定范围内的所有字符串:

def print_between(start, end):
    s = start
    while s <= end:
        print (s)
        s = next(s)

例子:

print_between('ab', 'ad')
于 2015-04-05T22:17:29.167 回答
0

您可以从一些伪代码开始:

lower=...
upper=...
str = next(lower)
while before(str, upper) :
    print(str)
    str = next(str)

next功能:

def next (str) :
    if str[-1] != 'z' :
        return str[:-1] + chr(ord(str[-1]) + 1) # increment last char
    else:
        return next( str[0:-1] ) + 'a' # reset last char and increment previous

before功能:

def before (a, b) :
   for i in 0.. (len(a)-1) :
       if a[i] < b[i] :
           return True
   return False
于 2015-03-29T06:38:00.270 回答
0

您可以将其视为从基数 26 转换以获取整数范围,然后将这些整数转换回基数 26。您可以自己滚动,或者pip install python-baseconv,例如:

from string import ascii_lowercase
from baseconv import BaseConverter

def lex_range(start, end):
    if len(start) != len(end):
        raise ValueError('inputs must be same length')
    B26 = BaseConverter(ascii_lowercase)
    # use `xrange` in Py 2.x
    for n in range(int(B26.decode(start)), int(B26.decode(end)) + 1):
        yield B26.encode(n).rjust(len(start), 'a')

for result in lex_range('ab', 'ad'):
    print(result)

注意-只要它们按字典顺序排列,上述内容就可以工作start <= end-它们不需要相同的长度,因此lex_range('a', 'zz')仍会产生所需的输出-因此需要进行显式len检查。

输出:

# ab
# ac
# ad
于 2015-03-29T08:40:56.480 回答