Python字符串迭代
我卡住了,需要检查像“3456”或“5678”这样的字符串是否像梯子。 例如:1234-梯形图 3476-不是梯子 我的代码:Python字符串迭代,python,string,Python,String,我卡住了,需要检查像“3456”或“5678”这样的字符串是否像梯子。 例如:1234-梯形图 3476-不是梯子 我的代码: def is_ladder(block): for i in range(len(block)-1): if ( ord(block[i]) == ord(block[i+1])+1): return True return False 如何实现?此外,如果可能,如何检查每个字符在字符串中是
def is_ladder(block):
for i in range(len(block)-1):
if ( ord(block[i]) == ord(block[i+1])+1):
return True
return False
如何实现?此外,如果可能,如何检查每个字符在字符串中是否相同,如“aaaa”或“5555”?根据新的要求,这里:
def is_ladder(block):
step = ord(block[0])-ord(block[1])
if step not in (-1,1):
return False
return all([ord(block[i])-ord(block[i+1])==step for i in xrange(len(block)-1)])
还可以检查每个字符是否与以下字符相同:
block.count(block[0]) == len(block)
首先转换为数字列表后,检查上下顺序。两两迭代从中提升 结果:
>>> print is_ladder('1234')
True
>>> print is_ladder('4321')
True
稍后:这是您修改的问题的解决方案(阶梯的字母/数字都相同)
后来还是。如果没有别的,了解成对迭代的习惯用法是很有用的。以下是它产生的结果:
>>> for i, j in pair(range(5)):
... print i, j
...
0 1
1 2
2 3
3 4
它将序列拆分为成对的连续元素。当第二个序列(被
next(b,None)
提升了一个位置)为空时,迭代终止。为什么您认为您的代码不起作用?因为输出不是我想要的,所以出现了56983459。如果“xxxx”与发送的参数的字符相同,我需要函数返回TRUE。我想您的意思是int()
,而不是ord()
。当你的意思是“这个十进制数字的数值”时,不要去搅乱字符的编码值。“4321”应该返回什么?对于4321,也应该返回true,我如何在我的函数中使用它?你只需要返回结果。我使用了你的变量名,这样你就可以把它粘贴进去。也很好用!我很感激。非常感谢,非常有魅力!感谢您为“xxxx”提供更多解决方案,其中x-相同字符。很好!不用担心,不客气
def is_ladder(block):
block_digits = [ord(c) for c in block]
return (
all(c + 1 == d for c, d in pair(block_digits)) or
all(c - 1 == d for c, d in pair(block_digits)) or
len(set(block_digits)) == 1
)
>>> for i, j in pair(range(5)):
... print i, j
...
0 1
1 2
2 3
3 4
def seq(s):
if all(s[0]==x for x in s[1:]):
return True
elif ord(s[0]) > ord(s[1]):
s = s[::-1]
first = ord(s[0])
for i in s[1:]:
if ord(i) != first + 1:
return False
else:
first = ord(i)
return True
In [19]: seq("aaaa")
Out[19]: True
In [20]: seq("4321")
Out[20]: True
In [21]: seq("1230")
Out[21]: False
In [22]: seq("edcb")
Out[22]: True