Python:如何在一个字符串中获得连续的n大小的片段?

Python:如何在一个字符串中获得连续的n大小的片段?,python,Python,给定一个字符串,如8584320342564023450211212339232399239110001012346596,如何获得所有连续的4位子序列 例如,上面的字符串将产生:8548、5843、8432、0342,这将设置输出,以包含列表列表,每个4个字符序列有一个叶: output = [] for i in range(len(input) - 3): output.append(input[i:i+4]) 使用以下代码,可以从第i个位置开始获得n个字符的子序列: str[i

给定一个字符串,如8584320342564023450211212339232399239110001012346596,如何获得所有连续的4位子序列


例如,上面的字符串将产生:8548、5843、8432、0342,

这将设置输出,以包含列表列表,每个4个字符序列有一个叶:

output = []
for i in range(len(input) - 3):
    output.append(input[i:i+4])

使用以下代码,可以从第i个位置开始获得n个字符的子序列:

str[i:i+n]
请注意,第0个位置是字符串的起始位置,而不是第一个位置。我的意思是str[0:0+n]将为您提供前n个字符,而不是str[1:1+n]

代码如下:

s =  "8584320342564023450211233923239923239110001012346596"

for i in range(len(s) - 3):
    print(s[i:i+4])

我想这正是你想要的:

es = '8584320342564023450211233923239923239110001012346596'
strings = [es[x:x+4] for x in xrange(0, len(es)-3)]
输出

>> strings
Out[42]: 
['8584',
 '5843',
 '8432',
 '4320',
 '3203',
 '2034',
 '0342',
 '3425',
 '4256',
 '2564',
 '5640',
 '6402',
 '4023',
 '0234',
 '2345',
 '3450',
 '4502',
 '5021',
 '0211',
 '2112',
 '1123',
 '1233',

  ...

下面是一个正则表达式解决方案:

import re
re.findall("[0-9]{4}","8584320342564023450211233923239923239110001012346596")
编辑:多亏了这条评论,我知道你真正想要的是所有重叠的匹配。我在这里找到了一个现有的stackoverflow答案:

将其用作所需正则表达式的提示。在您的情况下,您可以使用:

>>> re.findall("(?=(\d{4}))","8584320342564023450211233923239923239110001012346596")
['8584', '5843', '8432', '4320', '3203', '2034', '0342', '3425', '4256', '2564', '5640', '6402', '4023', '0234', '2345', '3450', '4502', '5021', '0211', '2112', '1123', '1233', '2339', '3392', '3923', '9232', '2323', '3239', '2399', '3992', '9923', '9232', '2323', '3239', '2391', '3911', '9110', '1100', '1000', '0001', '0010', '0101', '1012', '0123', '1234', '2346', '3465', '4659', '6596']

正则表达式对每组4进行分组,OP的问题是希望每组4都包含字符串中的每个字符。您的代码将执行85843202…,而问题需要85845843。。。
>>> re.findall("(?=(\d{4}))","8584320342564023450211233923239923239110001012346596")
['8584', '5843', '8432', '4320', '3203', '2034', '0342', '3425', '4256', '2564', '5640', '6402', '4023', '0234', '2345', '3450', '4502', '5021', '0211', '2112', '1123', '1233', '2339', '3392', '3923', '9232', '2323', '3239', '2399', '3992', '9923', '9232', '2323', '3239', '2391', '3911', '9110', '1100', '1000', '0001', '0010', '0101', '1012', '0123', '1234', '2346', '3465', '4659', '6596']
>>> from itertools import islice
>>> line = "8584320342564023450211233923239923239110001012346596"
>>> map(''.join, zip(*(islice(line,i,None) for i in range(4))))
['8584', '5843', '8432', '4320', '3203', '2034', '0342', '3425', '4256', '2564', '5640', '6402', '4023', '0234', '2345', '3450', '4502', '5021', '0211', '2112', '1123', '1233', '2339', '3392', '3923', '9232', '2323', '3239', '2399', '3992', '9923', '9232', '2323', '3239', '2391', '3911', '9110', '1100', '1000', '0001', '0010', '0101', '1012', '0123', '1234', '2346', '3465', '4659', '6596']