Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字符串迭代_Python_String - Fatal编程技术网

Python字符串迭代

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 如何实现?此外,如果可能,如何检查每个字符在字符串中是

我卡住了,需要检查像“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

如何实现?此外,如果可能,如何检查每个字符在字符串中是否相同,如“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