Python 一次遍历两个字符的字符串
我有一个数据字符串,我需要从中读取前两个字符,使用,然后丢弃 比如说,Python 一次遍历两个字符的字符串,python,string,iteration,Python,String,Iteration,我有一个数据字符串,我需要从中读取前两个字符,使用,然后丢弃 比如说, code = '2436444423' 我想将“24”赋值给值“x”,并从原始字符串中删除“24”,保留为: code = '36444423' 然后将“36”分配给“y”,将其删除,“44”分配给“z”,依此类推,直到原始字符串为空。执行以下操作: code = '2436444423' code = iter(code) for x in code: print x, next(code) 以下是使用生成器
code = '2436444423'
我想将“24”赋值给值“x”,并从原始字符串中删除“24”,保留为:
code = '36444423'
然后将“36”分配给“y”,将其删除,“44”分配给“z”,依此类推,直到原始字符串为空。执行以下操作:
code = '2436444423'
code = iter(code)
for x in code:
print x, next(code)
以下是使用生成器的一种方法:
code = '2436444423'
g = (''.join(t) for t in zip(*[iter(code)]*2))
x, y = next(g), next(g)
z = next(g)
这也可以是一个列表理解,其计算结果为['24','36','44','44','23']
[''.join(t) for t in zip(*[iter(code)]*2)]
免责声明:这不会在任何时候更改变量code
的绑定。另外,如果代码长度为奇数,它将不会返回最后一个字符。您可以使用(在python 3中,itszip_longest
)获得预期的对:
>>> from itertools import izip_longest
>>> args = [iter(code)] * 2
>>> [''.join(k) for k in izip_longest(*args)]
['24', '36', '44', '44', '23']
然后,如果需要整数类型的数字,只需将值分配给变量并使用int
:
>>> x,y,z,j,p=[int(''.join(k)) for k in izip_longest(*args)]
>>> (x,y,z,j,p)
(24, 36, 44, 44, 23)
v,w,x,y,z=[code[i:i+2]表示范围内的i(0,len(code),2)]
我认为这不太可读;乍一看,我永远猜不出这与情侣有关。而且显式比隐式好。没有赋值。事实上,最好使用ZIP,而不是同时循环字符串和迭代器。Kasra:一种简单的方法。如果#字符是偶数,请参见findall(“..”,“1234567890”)。如果#字符是奇数的re.findall('..?','123456789'),另一种非常简单的方法是:使用twoCharList=re.findall('..?','123456789')。无论字符数是奇数还是偶数,这都会起作用。@mario23是的,这是一个很好的解决方案,但不适用于长字符串!Shashank:你能在下一个答案的评论中考虑我的答案吗?当“字符”也很奇怪时,它就起作用了。@mario23我读了你的答案,这很好,但我认为在我的答案中没有意义。也许你可以发布一个关于re
模块的自己的答案?