0

のような文字列が与えられた場合"8584320342564023450211233923239923239110001012346596"、どのようにしてすべての連続する4桁のサブシーケンスを取得できますか?

たとえば、上記の文字列は次のようになります: 、、、、、8548.. ..584384320342

4

6 に答える 6

6

私はこれがあなたが望むことをするだろうと思います:

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',

  ...
于 2012-04-19T15:51:09.933 に答える
2

次のコードを使用して、 th番目nの位置から始まる文字のサブシーケンスを取得できます。i

str[i:i+n]

0番目の位置が1番目ではなく文字列の開始であることに注意してください。つまりstr[0:0+n]、最初のn文字は表示されませんstr[1:1+n]

コードは次のとおりです。

s =  "8584320342564023450211233923239923239110001012346596"

for i in range(len(s) - 3):
    print(s[i:i+4])
于 2012-04-19T15:50:09.703 に答える
2
data = "8584320342564023450211233923239923239110001012346596"
span = 4
for i in range(len(data) - span + 1):
    print data[i:i+span]
于 2012-04-19T15:50:18.697 に答える
1

正規表現の解決策は次のとおりです。

import re
re.findall("[0-9]{4}","8584320342564023450211233923239923239110001012346596")

編集:コメントのおかげで、あなたが実際に望んでいたのはすべて重複する一致だったことがわかります。私はここでそれに対する既存のstackoverflowの答えを見つけました: Python正規表現はすべての重複する一致を見つけますか?

必要な正規表現へのヒントとしてそれを使用します。あなたの場合、あなたは使うことができます:

>>> 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']
于 2012-04-19T15:57:37.277 に答える
1
>>> 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']
于 2012-04-20T04:47:26.147 に答える
0

これにより、4文字のシーケンスごとにリーフが付いたリストのリストが含まれるように出力が設定されます。

output = []
for i in range(len(input) - 3):
    output.append(input[i:i+4])
于 2012-04-19T15:50:09.283 に答える