1

辞書編集的に X より大きく、Y より小さいすべての文字列を "python" で見つけるにはどうすればよいですか? X と Y は同じ長さです。

例:

X = "ab" and Y = "ad"

したがって、答えは次のようになります。

"ab", "ac" and "ad"

これどうやってするの?

4

4 に答える 4

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 に答える
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

あなたが始めることができるいくつかの疑似コード:

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

最初に、現在の文字列の後の辞書編集上の次の文字列 (同じ長さで、文字 a ~ z のみを使用) を見つける関数、つまりインクリメントする関数を書きましょう。ほとんどの場合、これは簡単です。最後の文字をインクリメントするだけです。ただし、最後の文字がセット (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 に答える