开始的想法时用issubset函数,但是这个不符合我的需求
我的需求是这样,有一组数字,比如 1,3,5,7,8,9,10,30,70,71,100
从小到大排列的,然后我要挑选出来连续的数字,
2个连续:7,8
三个连续:7,8,9
issubset会一口气都匹配成功 :wink:
所以我就用了下面这个
if ''.join([str(x) for x in checklist]) in ''.join([str(x) for x in continuelist]):
但是写法也有问题,居然会认为8158 8168是连续的数字。。。。
ERROR: >>> count: 5 floor ['8158', '8168']
有什么更好的方法完成这个功能吗?
参考代码如下- import urllib, urllib2, cookielib,re
- import sys,os,random
- import mimetypes
- import mimetools
- import codecs
- import platform
- import time
- import datetime
- import pdb
- import getopt
- from urllib2 import HTTPError, URLError
- reload(sys)
- sys.setdefaultencoding('utf8')
- continuelist =[]
- target_list = ['8086', '8143', '8145', '8149', '8158', '8168', '8174', '8177', '8181', '8188', '8190', '8195', '8203', '8207', '8209', '8211', '8213', '8217', '8224', '8229', '8444', '8453', '8456', '8458', '8462', '8471', '8475', '8481', '8490', '8496', '8507', '8518', '8529', '8538', '8559', '8574', '8591', '8606', '8620', '8950', '8959', '8963', '8970', '8975', '8980', '8984', '8988', '8991', '8996', '9001', '9003', '9011', '9024', '9032', '9048', '9059', '9072', '9084', '9092', '9415', '9419', '9424', '9426', '9432', '9435', '9439', '9445', '9447', '9451', '9454', '9456', '9461', '9463', '9468', '9471', '9477', '9481', '9487', '9490', '9605', '9608', '9677', '9680', '9682', '9689', '9693', '9697', '9699', '9701', '9705', '9709', '9713', '9717', '9720', '9723', '9730', '9742', '9759']
- #print target_list
- con_num = 2
- #for i in range(int(target_list[0]),int(target_list[-1])+1):
- for i in range(int(target_list[0]),int(target_list[-1])+1):
- continuelist.append(str(i))
- print continuelist
- for items in range(len(target_list)):
- checklist = target_list[items:items+int(con_num)]
- if len(checklist) < int(con_num):
- #print 'Skip',checklist
- continue
- if set(checklist).issubset(set(continuelist)):
- #if ''.join([str(x) for x in checklist]) in ''.join([str(x) for x in continuelist]):
- print u'ERROR: >>> count:',items+1,u'floor',checklist
复制代码 |