0

重複の可能性:
文字列の文字がアルファベット順に昇順であり、その昇順が等間隔のpythonであるかどうかを確認します

これは私が現在持っているものです:

wordlist = ['fox', 'aced', 'definite', 'ace']

for word in wordlist:
    a = len(word)
    if (ord(word[a-(a-1)] - ord(word[(a-a)])) == ord(word[a-(a-2)])-ord(word[a-(a-1)]:
        print "success", word
    else:
        print "fail", word

私がやろうとしているのは、単語の各文字間のASCII値を計算することです。そして、文字の順序が同じ値だけ増加しているかどうかを確認します。

したがって、foxの場合、2番目と1番目の文字の順序の差が3番目と2番目の文字の順序の差と等しいかどうかをチェックします。

ただし、現在の「if」ステートメントでは、単語の最初の3文字のみが比較されます。このステートメントを書き直して、3を超える長さの単語のすべての文字をカバーするにはどうすればよいですか?

これを明確に提示できない場合は申し訳ありませんが、お時間をいただきありがとうございます。

4

6 に答える 6

1

の使用に注意してくださいlen(set(...)) < 2

def check(word):
    return len(set(ord(a) - ord(b) for a,b in zip(word,word[1:]))) < 2

wordlist = ['fox', 'aced', 'definite', 'ace']
print filter(check, wordlist)

プリント:

['fox', 'ace']
于 2012-04-15T11:20:07.060 に答える
1

検討

import operator

def diff(s):
    return map(operator.sub, s[1:], s[:-1])

wordlist = ['fox', 'aced', 'definite', 'ace']
print [w for w in wordlist if len(set(diff(map(ord, w)))) == 1]

## ['fox', 'ace']

後者の式は次のように分解されます。

w = 'fox'
print map(ord, w) # [102, 111, 120]
print diff(map(ord, w)) # [9, 9]
print set(diff(map(ord, w))) # set([9])
print len(set(diff(map(ord, w)))) # 1
于 2012-04-15T12:01:44.977 に答える
0

これを試して:

wordlist = ['fox', 'aced', 'definite', 'ace', 'x']

for word in wordlist:
    if len(word) < 2:
        print "fail", word
        continue
    diff = ord(word[1]) - ord(word[0])
    if all(ord(word[i+1])-ord(word[i])==diff for i in xrange(1, len(word)-1)):
        print "success", word
    else:
        print "fail", word

このソリューションは、中間リストや単語スライスを生成せず、内部の処理all()がイテレータで行われるため、効率的であることに注意してください。また、all()「短絡」です。最初Falseに検出されたときに終了します。

于 2012-04-15T04:45:00.470 に答える
0

単語内のすべての文字のオーダーの違いが同じであることを確認しようとしていると思います。

def check(word):
    return all((ord(ele_1) - ord(ele_2)) == (ord(word[0]) - ord(word[1])) for ele_1,ele_2 in zip(word,word[1:]) )

結果:

>>> check('abcde')
True
>>> check('wdjhrd')
False

リストへの適用:

wordlist = ['fox', 'aced', 'definite', 'ace']

new_list = filter(check, wordlist)

結果:

>>> new_list
['fox', 'ace']
于 2012-04-15T04:57:36.407 に答える