亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 7009 | 回復(fù): 7
打印 上一主題 下一主題

判斷一個(gè)列表是否屬于另外一個(gè)列表 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2014-08-19 14:48 |只看該作者 |倒序?yàn)g覽
開始的想法時(shí)用issubset函數(shù),但是這個(gè)不符合我的需求
我的需求是這樣,有一組數(shù)字,比如 1,3,5,7,8,9,10,30,70,71,100
從小到大排列的,然后我要挑選出來連續(xù)的數(shù)字,
2個(gè)連續(xù):7,8
三個(gè)連續(xù):7,8,9

issubset會(huì)一口氣都匹配成功 :wink:
所以我就用了下面這個(gè)
if ''.join([str(x) for x in checklist]) in ''.join([str(x) for x in continuelist]):
但是寫法也有問題,居然會(huì)認(rèn)為8158 8168是連續(xù)的數(shù)字。。。。
ERROR: >>> count: 5 floor ['8158', '8168']

有什么更好的方法完成這個(gè)功能嗎?




參考代碼如下
  1. import urllib, urllib2, cookielib,re
  2. import sys,os,random
  3. import mimetypes
  4. import mimetools
  5. import codecs
  6. import platform
  7. import time
  8. import datetime
  9. import pdb
  10. import getopt
  11. from urllib2 import HTTPError, URLError
  12. reload(sys)
  13. sys.setdefaultencoding('utf8')

  14. continuelist =[]
  15. 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']

  16. #print target_list
  17. con_num = 2
  18. #for i in range(int(target_list[0]),int(target_list[-1])+1):
  19. for i in range(int(target_list[0]),int(target_list[-1])+1):
  20.     continuelist.append(str(i))
  21. print continuelist
  22. for items in range(len(target_list)):
  23.     checklist = target_list[items:items+int(con_num)]
  24.     if len(checklist) < int(con_num):
  25.         #print 'Skip',checklist
  26.         continue
  27.     if set(checklist).issubset(set(continuelist)):
  28.     #if ''.join([str(x) for x in checklist]) in ''.join([str(x) for x in continuelist]):
  29.         print u'ERROR: >>> count:',items+1,u'floor',checklist
復(fù)制代碼

論壇徽章:
33
榮譽(yù)會(huì)員
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-17 06:23:27操作系統(tǒng)版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-04-24 06:20:0015-16賽季CBA聯(lián)賽之天津
日期:2016-05-06 12:46:59
2 [報(bào)告]
發(fā)表于 2014-08-19 16:49 |只看該作者
回復(fù) 1# bxfqing

只針對(duì)你的標(biāo)題, 我覺得用 set 可能會(huì)很容易吧? 只人判斷 子集 就可以了.

但你問題中的連續(xù)數(shù)字, 我沒搞明白的時(shí), 你為啥不把它們變成數(shù)字, 而是弄些字符串在操作呢?
   

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2014-08-19 18:09 |只看該作者
回復(fù) 2# q1208c


    謝謝你的提議,我使用你的方法試試

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2014-08-22 16:38 |只看該作者
  1. s= [1,3,4,5,66,88]
  2. childList = [s[i:i+n] for i in range(len(s)) for n in range(1, len(s)-i+1)]
  3. for child in childList:
  4.         if len(child) == 2 and child[0]+1 == child[1]:
  5.                 print "兩個(gè)連續(xù)的:",child

  6.         if len(child) == 3 and child[0]+1 == child[1] and child[1]+1 == child[2]:
  7.                 print '三個(gè)連續(xù)的:',child
復(fù)制代碼

論壇徽章:
11
2015年迎新春徽章
日期:2015-03-04 09:55:282017金雞報(bào)曉
日期:2017-02-08 10:39:4215-16賽季CBA聯(lián)賽之遼寧
日期:2016-12-15 10:24:1715-16賽季CBA聯(lián)賽之佛山
日期:2016-11-30 09:04:2015-16賽季CBA聯(lián)賽之江蘇
日期:2016-04-29 15:56:1215-16賽季CBA聯(lián)賽之同曦
日期:2016-04-12 13:21:182016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之山東
日期:2016-02-16 11:37:52每日論壇發(fā)貼之星
日期:2016-02-07 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-07 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2018-01-09 16:25:37
5 [報(bào)告]
發(fā)表于 2014-08-27 12:17 |只看該作者
本帖最后由 bskay 于 2014-08-27 12:29 編輯

傻了....

if ','.join([str(x) for x in checklist]) in ','.join([str(x) for x in continuelist]):


ls = map(int, target_list)
ret = []
part = []
for d in ls:
        if len(part) == 0:
                part.append(d)
                continue
        if part[-1]+1 == d:
                part.append(d)
                continue
        if len(part) < 2:
                part = []
                continue
        ret.append(part)
        part = []
       
#2個(gè)的
[a for a in ret if len(a) == 2]
#3個(gè)的
[a for a in ret if len(a) == 3]

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2014-09-16 11:15 |只看該作者
比較笨的方法,歡迎指點(diǎn):
  1. target_list = ['8140', '8143', '8144', '8149', '8158', '8159', '8160', '8160', '8181', '8188', '8190', '8195', '8203', \
  2.                '8207', '8209', '8211', '8213', '8217', '8224', '8229', '8444', '8453', '8456', '8458', '8462', '8471', \
  3.                '8475', '8481', '8490', '8496', '8507', '8518', '8529', '8538', '8559', '8574', '8591', '8606', '8620', \
  4.                '8950', '8959', '8963', '8970', '8975', '8980', '8984', '8988', '8991', '8996', '9001', '9002', '9003', \
  5.                '9024', '9032', '9048', '9059', '9072', '9084', '9092', '9415', '9419', '9424', '9426', '9432', '9435', \
  6.                '9439', '9445', '9447', '9451', '9454', '9456', '9461', '9463', '9468', '9471', '9477', '9481', '9487', \
  7.                '9490', '9605', '9608', '9677', '9680', '9682', '9689', '9693', '9697', '9699', '9701', '9705', '9709', \
  8.                '9713', '9717', '9720', '9723', '9730', '9742', '9759']

  9. def findAllContinuousSubList(originalList = None):
  10.     if originalList is None:
  11.         originalList = []

  12.     target_list = [int(i) for i in originalList]
  13.     new_list=[]
  14.     new_sub_list = []
  15.     for i in range(0,len(target_list)-1):
  16.         if target_list[i]-target_list[i+1]==-1:
  17.             new_sub_list.append(target_list[i])
  18.         elif target_list[i]-target_list[i+1]!=-1 and target_list[i-1] in new_sub_list:
  19.             new_sub_list.append(target_list[i])
  20.             new_list.append(new_sub_list)
  21.             new_sub_list = []
  22.     return new_list
復(fù)制代碼
結(jié)果: [[8143, 8144], [8158, 8159, 8160], [9001, 9002, 9003]]

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2014-09-16 11:42 |只看該作者
回復(fù) 4# huangxiaohen
強(qiáng)大, 但是如果list很大的話這個(gè)可能對(duì)內(nèi)存消耗優(yōu)點(diǎn)大,不妨試下iterator
  1. def findAllContinuousSubListThroughIter(s):
  2.     s = [int(i) for i in s]
  3.     import itertools

  4.     # iterator for two continuous sublists
  5.     sub_list_com_2 = itertools.combinations(s, 2)
  6.     for sub_list in sub_list_com_2:
  7.         if sub_list[0]-sub_list[1]==-1:
  8.             print ">>> 兩個(gè)連續(xù): %s" %list(sub_list)

  9.     # iterator for three continuous sublists
  10.     sub_list_com_3 = itertools.combinations(s, 3)
  11.     for sub_list in sub_list_com_3:
  12.         if sub_list[0]-sub_list[1]==-1 and sub_list[1]-sub_list[2]==-1:
  13.             print ">>> 三個(gè)連續(xù): %s" %list(sub_list)
復(fù)制代碼

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2014-10-09 13:55 |只看該作者
謝謝大家的幫助,我慢慢試試每種寫法
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP