2010年7月30日星期五
[zz]新东方励志:毅力,是一种快乐的持续
在这个世界上,当你想有所成就的时候,最先想到的应该是找到自己的原始冲动,然后用毕生的时间全力以赴、梦萦魂牵地去实现它。
所谓原始冲动,就是你自己的天赋所在,你最狂热最感兴趣,不做就会死的那件惟一的事情。
每天用你最喜欢的方式做你最喜欢的事情,这是一种莫大的幸福。然后,每天重复这种快乐的做事方式和做事心情,久而久之,形成习惯。天长日久,这种习惯就会成为性格。性格决定命运。性格不是天生的,性格就是这样培养出来的。所以,要让你的命运出现转机,就要找到自己最喜欢的事情。
当你因为兴趣而做一件事情的时候,这个世界上就没有毅力和坚持之类的事情。外人看到的你的毅力,仅仅是因为你做这件事情时那种快乐的心情。其实,在这个世界上,“毅力”是根本不存在的品质,因为所谓的“毅力”就是你因为快乐而可以长期做一件事情而不会放弃的态度。所以,毅力是一种快乐,不是一种痛苦。从这个角度上来说,有些懒惰的人,并不是他们真的懒惰,而是因为他们没有找到自己的原始冲动并把它培养成习惯而已。
我自己是最好的例子。我初中的时候找到自己的最爱是英语,然后用自己喜欢的方式学习它。比如,每天早晨都坐在奶奶身边读英语,每天读半个小时。奶奶不懂英语,但是每天都夸我:“俺乖乖读得真好!”我很有成就感,每天坐在奶奶身边读英语。奶奶就闭着眼睛静静地听着。我觉得,每天早晨,陪着奶奶读英文是世界上最幸福的事情。我从初一读到初三,从高一读到高三,大学里依然坚持晨读。慢慢地,同学们对我的英语成绩只能羡慕而无法超越。我晨读英语的习惯,是一种幸福的坚持,没有感觉到丝毫的痛苦。我也没想到,晨读英语需要毅力,它只是我的原始冲动而已。
还有一个例子,一个我非常欣赏的男人的故事。他是一个防盗系统安装工程师,他的工作就是每天去客户的门前安装防盗器械,每次挖洞的时候,他的文字灵感就如“滔滔江水,连绵不绝”。每当此时,他就会坐在梯子上,把他喷薄而出的美丽文字记录下来。当年的他,就是这样,一边干活一边记录下这些让他兴奋不已的文字精灵。半年下来,居然积累了200多首歌词。他选出自己最得意的100首装订成册,寄了100份到各大唱片公司。没想到泥牛入海,毫无音信。但他并不伤心,因为他对文字有发自心底的热爱,像喷涌而出的岩浆,火红火红的,谁都拦不住。他是因为热爱而写,不是为了别的。我觉得,这个男人心中最柔软的部分已经留给了他的最爱——具有缠绵情怀的中国汉字。1997年7月7日凌晨,他像往常一样去安装防盗系统。这时有人打电话给他,他坐在梯子上接了电话,这个打电话给他的人叫做吴宗宪。
故事的结局是,工程师成为海峡两岸最具声望的歌词作者,他写的歌词包括《东风破》、《菊花台》、《青花瓷》等,他的名字叫方文山。周杰伦歌曲中大部分经典的歌词都出自他的神来之笔。
找到你自己的原始冲动,那么,坚持,就成为一种快乐的持续。这种持续,才是真正的毅力。
2010年7月22日星期四
BGS-KDE算法:读”Non-parametric Model for Background Subtraction“
æ¬ææ¯ECCV 2000å¹´çæç« ï¼"Non-parametric Model for Background Subtraction"ï¼ä½è æ¯Ahmed Elgammalï¼Rutgers大å¦å¯ææï¼è¿ä¸ªå¤§å¦å¥½ä¼¼æ²¡å¬è¿ï¼æ¥äºä¸ä¸æåå¨150åå·¦å³ï¼ï¼ä»ç主页å¨è¿éï¼ä¸æ³¨äºäººçè¡ä¸ºåæãè·è¸ªçãä»è¿ç¯æç« å¯ä»¥æ¾å¾å°ï¼è¿æä¸ä¸ªå¨çº¿çå¨è¿éã
è¿ç¯æç« æ¯2000å¹´çï¼åå¹´åçæç« ï¼ä¹æ¯ç¬¬ä¸ä¸ªæåºä½¿ç¨KDEæ¹æ³çãæè°KDEæ¹æ³æ¯æï¼Kernel Denity Estimation,å³ä½¿ç¨æ ¸å½æ°æ¥ä¼°è®¡æ¦çãæ ¸å¿ææ³å°±æ¯æ ¹æ®æè¿N帧å¾åï¼å»ºç«Nä¸ªæ ·æ¬ä½ä¸ºèæ¯Kernel模åï¼å¨æ£æµçæ¶åï¼ä½¿ç¨ç¸åºçkernel彿°æ¥ä¼°è®¡å½ååç´ å¼åºç°çæ¦çï¼å¦æå¤§äºæä¸ä¸ªé¨éï¼å³ä¸ºèæ¯ã
KDEç®æ³æ¯ä¸ä¸ªGeneralçæ¹æ³ï¼å¦ææææçKernel彿°åä¸ºé«æ¯å½æ°ï¼åKDE彿°å°±éå为generalizedçæ··å髿¯æ¨¡åï¼è¿éæ¯ä¸ä¸ªæ ·æ¬å°±æ¯ä¸ä¸ªé«æ¯æ¨¡åã
å¼å¾æ³¨æçæ¯ï¼æ´ä¸ªKDEç®æ³æ¯åºäºè¿æ ·çå设ï¼èæ¯æ¯ååå¾é¢ç¹çï¼ä¸è¶³ä»¥ç¨å ä¸ªé«æ¯æ¨¡åæ¥è¡¨ç¤ºï¼ä½æ¯å¨å¾ççæ¶é´é´éå ï¼è¿æ¯ç¬¦åä¸å®çåå¸çï¼ä¹å°±æ¯æ¬ææè°çlocal-in-timeï¼ä¾å¦é«æ¯æ¨¡åã
1. åºæ¬èæ¯æ¨¡å
æ¦çå¯åº¦ä¼°è®¡ï¼Density Estimation
KDEæ¹æ³ä¹æ¯åºäºåç´ çï¼ä»¥ä¸æè¿°é½æ¯å¯¹äºæ¯ä¸ªåç´ çã设 x1, x2, x3,....xNæ¯åç´ çæè¿Nä¸ªæ ·æ¬ï¼ä½¿ç¨è¿äºæ ·æ¬å¼ï¼æ¥å½ååç´ ç¹çæ¦çå¯åº¦å½æ°å¦ï¼
Pr(xt)=[K(xt-x1)+K(xt-x2)+ ... +K(xt-xN)]/N (1)
å ¶ä¸ï¼K表示Kernel彿°ï¼xt表示åç´ å¨æ¶å»tçå¼ã妿Pr(xt)<T,è¿éTæ¯ä¸ä¸ªå ¨å±é¨éï¼è¯´æå¯ä»¥æ¦çå°ï¼å¯ä»¥å¤å®ä¸ºåæ¯ï¼åä¹ä¸ºèæ¯ã
è¿éï¼å¦æKä¸ºé«æ¯å½æ°ï¼å°±å¾åæ··å髿¯æ¨¡åäºãèä¸Pr(xt)å ¬å¼å¯ä»¥ä½¿ç¨æ¥æ¾è¡¨æ¹æ³è®¡ç®ï¼å¯ä»¥æå¤§æé«è¿ç®é度ãç¸æ¯ä¸æ··å髿¯æ¨¡åï¼å 为KDEç®æ³åªæ¯ä¾èµäºæè¿çNä¸ªæ ·æ¬ï¼å¾å®¹æâforgetâ以åçç¶åµï¼æä»¥å¯ä»¥çµæ´»æ§å¶å ¶ç²¾ç¡®åº¦ã
æ ¸å½æ°å®½åº¦ä¼°è®¡ï¼Kernel Width Estimation(ææå®ç§°ä¸ºé«æ¯å½æ°çæ å差估计)
å¦æä½¿ç¨é«æ¯å½æ°ä¸é¢çå
¬å¼1å°±å¯ä»¥æ´å å
·ä½åï¼æé«æ¯å½æ°ä»£å
¥å
¬å¼1ï¼å
·ä½å
¬å¼è§åæï¼å
¬å¼ä¸æä¸ä¸ªå
³é®åæ°--髿¯åå¸çæ åå·®ï¼æ¤åæ°åæ äºå½ååç´ çååå§çæ
åµï¼å¯ä»¥éè¿å¦ä¸æ¹å¼æ¥ä¼°è®¡æ¤åæ°ï¼å¯¹æ¯ä¸ªé¢è²ééï¼N个è¿ç»çæ ·æ¬ï¼ç¸é»ç两个å¼çå·®å¼|xi - x(i+1)|ï¼å¨è¿äºè¿ç»ç(xi, x(i+1) )对ä¸ï¼æ±å¾ä¸å¼mãæ¤ä¸å¼m䏿 åå·®æç´æ¥å¯¹åºå
³ç³»ï¼
delta = m/(0.68*1.414)
è¿é为ä»ä¹ä½¿ç¨è¿æ ·ä¸å¼æ¥ä¼°è®¡æ åå·®å¢ï¼è¿æ¯å 为å¨Nä¸ªæ ·æ¬ä¸ï¼è¿ç»çä¸¤ä¸ªå¼ (xi, x(i+1) )å¾å¤§å¯è½æ¯å±äºåä¸ä¸ªlocal-in-timeç髿¯åå¸ãè¿æ ·çä¼°è®¡æ¯ææçã
2. æå¶è¯¯æ£(False Detection)
åæä¸ä¸ç¬¬äºç§è¯¯æ£çæ¥æºï¼å°±å¯ä»¥ç¥éï¼è½ç¶å¨å½ååç´ ç¹çKDEä¸ä¸è½å¹é
ä¸ï¼å 为è¿ä¸ªåç´ ç¹å¾å¯è½æ¯å¨é¢åä¸ç§»å¨è¿æ¥çï¼æä»¥è¿éå°±å¯ä»¥å¨å½ååç´ ç¹çä¸ä¸ªé¢åä¸å¯»æ¾æä½³çå¹é
ï¼è¿æ¯ä½¿ç¨åé¢çæ¦ç估计å
¬å¼ï¼å¨é¢åä¸å¯»æ¾æä½³çå¹é
ï¼å³æ¦ççæå¤§å¼ã
Pn(xt)=max{Pr(xt| By)},
å
¶ä¸By表示xtçé¢ååç´ ç¹ãè¥Pn(xt)å¤§äºæä¸ªé¨éth1ï¼åç¡®å®ä¸ºèæ¯ã
éè¿ä¸è¿°æ¹æ³ï¼è½ç¶è½å»æä¸äºè¯¯æ£ï¼ä½æ¯ï¼åæ¶ä¼æä¸äºçå®ç忝ç»å»æãèèå°çå®ç忝æè¿æ ·çæè¿æ ·çç¹ç¹ï¼æ´ä¸ªè¢«æ£æµåºæ¥ç忝ä¸å®æ¯å¨ä»éè¿çæä¸ªå°æ¹ç§»å¨å°è¿éæ¥çï¼è䏿¯å 个åç´ ç¹ãè¿éå®ä¹ä¸ä¸ªæ¦çPcï¼è¡¨ç¤ºæ´ä¸ªè¢«æ£æµåºæ¥çè¿ç»åºåæ¯ä»éè¿ç§»å¨è¿æ¥çæ¦çãå®ä¹å¦ä¸ï¼
Pc = Pn(xi)çä¹ç§¯
å
¶ä¸ï¼xiæ¯è¢«æ£æµåºæ¥çè¿ç»çåºåå
çåç´ ã对äºä¸ä¸ªçå®çåæ¯ç®æ ï¼æ´ä¸ªè¢«æ£æµåºæ¥çè¿ç»åºåï¼å¯¹äºä¸é¢çå
¬å¼ç计ç®ç»æåºè¯¥æ¯å¾å°çã
æä»¥ç»¼åä¸é¢ç两个æ¹é¢ï¼å¦æä¸ä¸ªåç´ ç¹åæ¶æ»¡è¶³Pn>th1åPc>th2ï¼åè¡¨ç¤ºè¿æ¯ä¸ä¸ªè¯¯æ£ï¼éæ°è¯´ä¸ä¸ï¼åºè¯¥æ¯ç¬¬äºç§è¯¯æ£ã
3. èæ¯æ´æ°
èæ¯æ´æ°ççç¥æä¸¤ç§ï¼
- éæ©æ§æ´æ°ï¼å³åªæ¯ææ°çæ ·æ¬(sample)æ·»å å°é£äºè¢«å¤å®ä¸ºèæ¯çåç´ ç¹æ¨¡å
- ç²ç®æ´æ°ï¼å³ææ°çæ ·æ¬æ·»å å°ä»»ä½åç´ ç¹æ¨¡å
è¿ä¸¤ä¸ªæ¹æ³åæå¼ç«¯ï¼ä¾å¦ç¬¬ä¸ç§æ¹æ³å¾ä¾èµä¸å¤å®çç»ææ¯ä¸æ¯æ£ç¡®ï¼å¦æéäºï¼å°±ä¼ä¸éåéã第äºç§æ¹æ³æ¯è¾ç²ç®ï¼ä¼æéæ¢åæ¯æè è¿å¨å¾æ ¢ç忝èå ¥å°èæ¯æ¨¡åä¸ãæ¬ææåºäºä¸ä¸ªç»åä¸¤ä¸ªæ´æ°çç¥çæ¹æ³ï¼ä½¿æ¢è½å¾å¿«çéç¨æ°çèæ¯æ¹åï¼åè½å¯¹åæ¯ï¼åè½è¶³å¤ç²¾ç¡®çæ£æµåºåæ¯ï¼ä½¿ç¨ä¸¤ä¸ªmodelæ¥è¾¾å°è¿ä¸ªç®çï¼Short-term mdel å Long-term modelï¼
Short-term model: è¿æ¯ä¸ä¸ªæè¿(very recent)åºæ¯Nä¸ªæ ·æ¬æ¨¡åï¼æ¤æ¨¡åå¯¹åºæ¯çååéåºå¾å¿«ï¼èä¸å¯¹åæ¯æ£æµå¾ææã使ç¨éæ©æ§çç¥æ´æ°èæ¯æ¨¡åï¼
Long-term model: è¿ä¸ªæ¨¡åä¿åç¸å¯¹ç¨³å®çèæ¯æ¨¡åï¼è䏿¹åé常çç¼æ ¢ãè¿ä¸ªæ¨¡åä¹å å«Nä¸ªæ ·æ¬ï¼ä½æ¯æ¤Nä¸ªæ ·æ¬çæåèªçæ¶é´çªå£æ¯short-term modelè¦å®½å¾å¤ãè¿ä¸ªæ¨¡å使ç¨ç²ç®æ´æ°çç¥æ´æ°ã
è¿ä¸¤ä¸ªæ¨¡åæ£æµç»æç交éï¼å¯ä»¥æ¶é¤çææ¨¡åçæç»éè¯¯åæ¯(false positive)ï¼ä¹å¯æ¶é¤é¿ææ¨¡åç»æä¸ç误æ£ãè¿éä¹ä¼é æä¸ä¸ªé®é¢ï¼å°±æ¯åæ¶æ¶é¤äºä¸äºæ£ç¡®ç忝ï¼ä¾å¦å¨çæç模å䏿£æµåºæ¥çéæ¢åæ¯ãæ¬æçè§£å³æ¹æ³æ¯ï¼å¨çææ¨¡å䏿£æµåºæ¥ç忝ï¼å¦æä¸åé¢çåå¹¶ç»æç¸é»çè¯ï¼å°±å¤å®ä¸ºæåç忝ãï¼è¿ç§è§£å³æ¹æ³ï¼ææå¾ èå¯ï¼æå¹¶ä¸æç½ä¸ºä»ä¹è¿æ ·å¤çå°±å¯ä»¥è§£å³æ¤é®é¢ï¼
4. é´å½±æ£æµ
é´å½±æ£æµæ¯èæ¯å·®åä¸çé¾ç¹ä¹ä¸ï¼é´å½±çç¹ç¹å°±æ¯é¢è²ç¸ä¼¼ï¼è亮度åä½ãæ¬æä½¿ç¨äºè²åº¦åæ (Chromaticity Coordinate)æ¥è¿ç®ï¼r=R/(R+G+B), g=G/(R+G+B), b=B/(R+G+B)ï¼å ¶ä¸r+g+b=1ï¼æä»¥ä¸ä¸ªåç´ çè²åº¦åæ å°±å¯ä»¥è¡¨ç¤ºä¸º(r, g)äºå ç»ãè¿ä¸ªäºå ç»ï¼åªæ¯è®°å½äºè²åº¦ä¿¡æ¯ï¼å®å ¨ä¸¢å¤±äºäº®åº¦ä¿¡æ¯ï¼å¯è½ä¼é æå¾å¤çæ¼æ£ãè¿éå°±å¦å¤å¼å ¥ä¸ä¸ªäº®åº¦ä¿¡æ¯s=R+G+Bï¼æä»¥åæ ·ç¨ä¸ä¸ªä¸å ç»<r, g, s>æ¥è¡¨ç¤ºä¸ä¸ªåç´ ï¼è¿éè²åº¦å亮度信æ¯å°±å®å ¨åºå弿¥äºãå¦ææ»¡è¶³è²åº¦r,gåéç¸è¿ï¼èa<st/sb<1çè¯ï¼å°±å¯è½å¤å®ä¸ºé´å½±ã
卿¬æä¸ï¼è¿æ¯ä½¿ç¨KDEçæ¹æ³å¦ä¸ï¼ä½¿ç¨åé¢çKDEçæ¹æ³ï¼è®¾A={x1, x2,...,xn}为ä¸åç´ çæ ·æ¬ï¼xt为å½ååç´ å¼ï¼å¨éåAä¸éåalpha<(xt/xi)<betaçxiç»æéåBï¼å¯¹Béåä¸çå
ç´ xi使ç¨äºç»´ç(r, g)åKDEè¿ç®ãè¿ééåB就称为ä¸å½ååç´ âç¸å
³çâèæ¯æ ·æ
¬ï¼è¿æ ·æå©äºæé«è¿ç®æçã
æ»ç»ï¼
æ¬ææ¯KDEç®æ³çå¼å±±ä¹ä½ï¼æå°çåæ³åªåè§£å³çé®é¢ä¹å¾å¤ãæ¬æçKDEæ¨¡åæ¯æ ¸å¿ï¼å¦ç¬¬1å°èä¸æè¿°çï¼è¯¯æ£æå¶ï¼éè¿é¢åå çæ¹æ³ï¼æå¶èæ¯çå°è¿å¨è¯¯å·®ï¼å¦ç¬¬2å°èä¸çæè¿°ï¼é¿çæèæ¯æ¨¡åï¼ä¼å¾è§£å³èæ¯æ´æ°å¿«æ ¢çé®é¢ï¼å¦ç¬¬3å°èæç¤ºï¼ä½¿ç¨è²åº¦å äº®åº¦åæ ï¼ä¼å¾è§£å³é´å½±çé®é¢ï¼å¦ç¬¬4å°èæç¤ºãè¿äºæ¹æ³é½æ¯å¼å¾å¦ä¹ çãæ¬ææ¹æ³ç宿¶æ§ï¼æä¸è¯´æ¯å¨400MHzçå¥è ¾CPUï¼å¤ç320x240çå¾çè½è¾¾å°15-20 fpsï¼è¿æ ·çé度å¯è§çï¼ææºä¼è¦å®ç°ä¸ä¸æ¬ç®æ³ã
2010年7月19日星期一
Python学习笔记--表达式
1. 赋值表达式
赋值表达式有如下几个特点:
- * 复制表达式创建一个引用;在Python中,变量中存储的只是对象的引用,赋值其实就是创建一个变量名到实际对象的一个引用
- * 变量名在第一次赋值的时候将会自动创建,无须声明和定义
- * 变量使用前必须被赋值
由于变量名中没有任何数据类型信息(记住,只是对象的引用),所以可以灵活对变量赋值任何类型的数据:eg:
x = 2 x = 'abc' x = [1,2,3] 在python中,有一种特殊的赋值--upacking assignment解包赋值,eg:
X, Y = 'abc', 'cde' # tuple
[X, Y] = ['abc', 'abc] # list
X, Y = 'ab' # string 可见,对于Sequence类型对象,都可以使用解包赋值,要求左边的变量数和右边的元素一致。
2010年7月17日星期六
摘自高效能人士笔记
摘自别人《高效能人士的7个习惯》的读书笔记“由内而外(inside-out)”的意思是从自身做起,甚至更彻底一些,从自己的内心做起,包括自己的思维定式、人格操守和动机。由内而外的观点认为 个人的成功必须先于公众领域的成功;只有先信守对自己的承诺,才能信守对他人的承诺。由内而外是一个持续的更新过程,以主宰人类成长和进步的自然法则为基 础,是螺旋向上的,它让我们不断进步,知道实现独立自强与有效的相互依赖。
2010年7月12日星期一
Python学习笔记--引用vs复制
>>> X = [1, 2, 3]
>>> L = ['a', X, 'b'] # Embed references to X's object.
>>> D = {'x':X, 'y':2}
这里X,L,D三个变量中的引用都指向了同一个对象[1,2,3],在其中任意一个修改,都会影响其他的变量。
有时候我们可能并不希望出现这样的情况,我们可能需要每个变量中都有一个对象的单独拷贝。实现方法如下:
- * 使用无限制的slice来拷贝sequence对象,eg:A = L[:]
- * 对于Dictionary,使用copy函数来实现对象拷贝 eg:B = D.copy()
- * 一些函数也会产生对象的拷贝,例如list
- * 标准库copy可以用来完成完全的拷贝, eg:import copy,然后调用X=copy.deepcopy(Y);
值得注意的是,前面的第一二种方法得到的拷贝,都是最高层的拷贝,而并部拷贝嵌套的数据结构,如果要彻底的拷贝,就可以使用最后一种方法,他是递归的拷贝所有的嵌套的对象。
Python学习笔记--TUples,Files
1. Tuples 元组
Tuples其实和List基本一致,都是有序的对象集合,与List不同的是,tuples是immutable的。
Tuples在使用小括号()包围起来的一系列对象。Tuples不支持任何函数
Tuples有如下一些特点:
- * 任意对象的有序集合
- * 通过下表offset存取
- * Immutable
- * 定长,异质,任意嵌套</li
- * 对象索引的数组,而不是对象本色
Tuples的一些操作:
T = () #空元组
T = (1, ) # 一个元素的元组,后面要加一个逗号
T = (0, 'Hi', 1.2, 3) # 异质
T = ('ab', ('cd', 'ef')) #嵌套
T[i:j] #slicing
for t in T #迭代
T1 + T2 #连接
由于Tuple不支持任何函数,如果想对Tuple排序,应该怎么做呢?方法如下:
>>> T = ('cc', 'aa', 'dd', 'bb')
>>> tmp = list(T)
>>> tmp.sort( )
>>> tmp
['aa', 'bb', 'cc', 'dd']
>>> T = tuple(tmp)
>>> T
('aa', 'bb', 'cc', 'dd')
这里可以看到使用list()和tuple()函数进行相互转换,值得注意的是,这两个函数都是产生新的对象。
另外,tuple的immutable只是适用于tuple的最上层,如下例子可以说明:
>>> T = (1, [2, 3], 4)
>>> T[1][0] = 'spam' # Works
>>> T
(1, ['spam', 3], 4)
>>> T[1] = 'spam' # Fails
TypeError: object doesn't support item assignment
这里T[1]是一个List,list是mutable的。
2. Files 文件
文件是Python中的特殊的数据对象,此对象关联外部文件,相关函数可以直接对文件进行操作。
File的相关操作如下:
output = open('/dir/filename', 'w')
input = open('data','r') # file may be open as 'w' for write
# 'r' for read or 'a' for append
S = input.read() # 读取文件全部数据到一个字符串中
S = input.read(N) #读取N字节
S = input.readline() #读取下一行,以行结束符号=为标志
L = input.readlines() #读取整个文件到一个字符串的行的列表中
output.write(s) #向文件中写字符串s
output.wirtelines(L) #把列表中L中的所有行写入文件中
output.close() #关闭文件
在Python中,一个对象不再被引用的时候会自动回收内存,在回收file对象的时候,会首先关闭文件。手动close一个文件,虽然不是必须的,但是是一个好的习惯.
2010年7月9日星期五
测试vim+vimpress写博客
vim+vimpress写博客
Vimpress插件是在vim编辑器中写wordpress博客的插件。
这里vim使用了一个加强版,在这里下载。
我在使用过程中出现了乱码,参照这里修改:http://dante.im/vim-encoding/
2010年7月5日星期一
Python学习笔记--List和Dictionary
1. List列表 概述
- * List是任意对象的有序集合
- * 使用下标索引其中的元素
- * 可变长度,异质(list中元素可以是不同类型),内嵌(list of list)
- * mutable,序列的操作都适用(index,slice...)
- * list是引用的集合,而不是对象本身
L = [ ] #空listL = [1, 2, ‘text’ ] #异质L = [1, 3, [1, 2] ] #嵌套L[1], L[1:3], L[i][j], len[L] # index, sliceL1+L2, L * 3 # 链接和复制for x in L 2 in LL2.append(4) L2.extend([5,6,7]) L2.sort( ) L2.index(1) L2.reverse( ) # 方法del L2[k] del L2[i:j] L2.pop( ) L2[i:j] = [ ] # 删除L2[i] = 1 L2[i:j] = [4,5,6] # 赋值, mutablerange(4) range(0, 4) # 产生整数列表L4 = [x**2 for x in range(5)] #列表推导式,(现在还不知道是什么意思)
2. Dictionay字典 概述
如果说列表List是有序对象集合的话,字典就是无序对象集合,他们之间最主要的差别就是,字典通过关键字(key)存取值,而不是offset。
字典有如下特点:
- * 通过Key读取,而不是offset
- * 任意对象的无序集合
- * 可变长度,异质,可任意嵌套
- * Mutable映射表
- * 字典是对象引用的hash表,而不是对象本身
可见Dictionary和List基本是一直,除了全面所说的存取方式。
D = {} #空字典,注意是大括号D1 = {'spam':2, 'egg':'None'} # 字典元素的定义方法D2 = {'food':{'ham':1,'egg':2}} # 嵌套定义D1['spam'] D2['food']['ham'] # 存取方法D1.has_key('egg'), 'egg' in D1, D2.values(), ... # Dictionary相关的方法D3 = dict(zip(keyslist, valuslist)) #Dictionary的构建(我现在还不清除这种用法)
由于Dictionary不是一个序列,所以不能直接使用迭代,要使用迭代的话,可以如下:
for item in D.keys():
Dictionary使用注意:
- * Dictionary是Mapping,而不是Sequence,在Dictonary中的各元素没有先后的顺序关系,所以对于Sequence的操作对Dictonary都不使用。如:连接,分片索引(slicing)
- * 对Dictionary的新的key赋值,就是增加一个新的元素。对已有的key赋值就是修改此元素
- * Dictionary的key不一定要是字符串string,其实任意不可变(immutable)的对象都可以,例如整数等
2010年7月1日星期四
Python学习笔记--string 字符串
1. 字符串的定义
可以使用单引号(' '),双引号(" "):这两个表示的方式完全等价。还可以使用三引号(单双引号都可以),可以进行多行的字符串的定义。Raw字符串,即完全原样字符串,不经心转义,eg:r'c:\py\text'Unicode字符串,多字节字符串, eg:u'text',u'ab\u0020cd'Unicode --> normal:str(u"text")normal --> Unicode:unicode("text")
2. 字符串操作
加法+:字符串的连接,'abc'+'def'乘法*:字符串重复,'Hi!' * 3求字符串的长度len()字符串循环索引:ss = 'Hello'for c in ss: print c, # H e l l o"H" in ss # 1 or true"z" in ss # 0 or false字符串索引和分块:ss[0] # 'H'ss[-2] # 'l'ss[1:3] #'el'ss[:-1] #'Hell'ss[m:n], m和n可以缺省,m缺省为0, n缺省为ss的长度ss[start: end: step], eg, ss[1:5:2], ss[ : :-1]字符串转换工具:不能直接把数值和字符串(即使这个字符串很像一个数字)使用加号“+”连接,因为加号“+”可能是表示字符串连接,也可能表示数值加法,所以Python就把这种情况视为语法错误。string--> number: eg. int("42"), float("1.23E-10"), string.atoi("42")number-->string: eg. str(42), `42`, 这里的运算符backquotes(`object`),把之间的对象object转换成字符串。eval 函数用来执行Python代码。改变字符串:首先要注意,字符串是不可改变的--immutale: can't chang in-place。所以要改变字符串,其实就是要使用相应的上述操作创造一个新的字符串。eg. ss='spam' ; ss[0]='A' 将触发错误。
3. 字符串格式化
Python在string中重载了%运算符,这里类似了C语言中的sprintf函数中%的作用,占位符,eg:>>> exclamation = "Ni">>> "The knights who say %s!" % exclamation'The knights who say Ni!'这里使用exclamation变量替换了左边字符串中的%s>>> "%d %s %d you" % (1, 'spam', 4)'1 spam 4 you'如果是多个变量的时候,要使用小括号包围起来,形成一个元组tuple>>> "%s -- %s -- %s" % (42, 3.14159, [1, 2, 3])'42 -- 3.14159 -- [1, 2, 3]'这里把int,float,array类型的数据自动转换成string类型