Python:我将如何编写这个';如果';用于任意长度单词的语句?

Python:我将如何编写这个';如果';用于任意长度单词的语句?,python,python-2.7,Python,Python 2.7,可能重复: 这就是我目前拥有的: 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 "fai

可能重复:

这就是我目前拥有的:

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值。并检查字母的ord是否增加相同的值

因此,对于fox,它将检查第二个和第一个字母的ord之间的差异是否等于第三个和第二个字母的ord差异

然而,与我当前的“如果”语句相比,只比较一个单词的前3个字母。我怎样才能重写这句话,把每一个字母都写在一个长度大于3的单词里


很抱歉,如果我不能清楚地表达这一点,谢谢您的时间。

也许可以尝试将
ord(单词[a-(a-2)]
更改为
ord(单词[a-(a-len((单词)-1)))
。我不确定这是否是您的确切代码,但似乎也有一些EOF错误。

试试这个:

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
wordlist=['fox','aced','definite','ace','x']
对于单词列表中的单词:
如果len(word)<2:
打印“失败”,word
持续
diff=ord(字[1])-ord(字[0])
如果所有(ord(字[i+1])-ord(字[i])==xrange(1,len(字)-1)中i的差异):
打印“成功”,word
其他:
打印“失败”,word

请注意,此解决方案是有效的,因为它不生成任何中间列表或字片,而且
all()
内部的处理是通过迭代器完成的,而且
all()
也是“短路”:它将在找到的第一个
False
时终止。

我相信您正在查看单词中每个字母之间的ord差异是否相同

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
>>> new_list
['fox', 'ace']
适用于您的列表:

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

new_list = filter(check, wordlist)
结果:

>>> check('abcde')
True
>>> check('wdjhrd')
False
>>> new_list
['fox', 'ace']

这是我的表格,我觉得它更具可读性,可以扩展为列表理解

>>> a = 'ace'
>>> all(ord(a[n])-ord(a[n-1]) == (ord(a[1])-ord(a[0])) for n in xrange(len(a)-1,0,-1))
True
要反复浏览单词列表,列表理解:

wordlist = ['fox', 'aced', 'definite', 'ace']
[a for a in wordlist if all(ord(a[n])-ord(a[n-1]) == (ord(a[1])-ord(a[0])) for n in xrange(len(a) -1,0,-1))]
返回:

['fox', 'ace']
注意
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)
考虑

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

你把这件事搞得太复杂了。只需在单词的字母上循环。
word[a-(a-1)]
word[1]
相同,您只想要升序字母吗?如果单词是
'a'
则不起作用。我们在这里讨论字符的差异,如果只有一个字符,没什么可做的。但他说的是任意长度的字符串,所以我希望它的长度可以是1或更大。@jamylak哦,好吧。我用一个很短的词来编辑我的答案。尽管你的推理很有道理,问题也很模糊,但我相信它是重复的。-1:这不适用于任意长度的字符串-正如所希望的那样。