#!/usr/bin/python
# -*- coding:UTF-8 -*-
__author__ = 'wxq'
from collections import Iterable
"""
1. 切片功能
1). 取列表中的前三個(gè)元素List[0:3]蚀乔,索引0開(kāi)始单寂,取到索引3,但不包括索引3愕秫;
2). 如果第一個(gè)索引是0液肌,可以省略挟炬;
3). List[1:3]從索引1開(kāi)始取,取到索引3但不包含索引3,所以只取了兩個(gè);
4). List[-1]表示倒數(shù)第一個(gè)
5). List[:10]前10個(gè)辟宗,List[-10:]后10個(gè)
5). List[:10:2]前10個(gè)數(shù)爵赵,每2個(gè)取一個(gè)
6). List[::3]所有數(shù)每3個(gè)取一個(gè)
*7). 字符串也可以使用切片功能,操作結(jié)果仍是字符串
*8). 元組tuple也可以使用切片功能,操作結(jié)果仍是元組
"""
myList = [0,1,2,'a','abc']
print myList[0:3]
print myList[:3]
print myList[1:3]
print myList[-1]
print myList[-2:-1]
print myList[-2:]
print myList[:5:2]
print myList[::3]
myTuple =? ('a','b','c',1,2,3,'z')
print myTuple[:]
print myTuple[:3]
print myTuple[1:5]
print myTuple[-3:-1]
print myTuple[::2]
myString = "ABSHDBASGHSV"
print myString[:]
print myString[:3]
print myString[1:3]
print myString[-1]
print myString[::3]
print "---------------------------END---------------------------"
"""
2. 迭代功能Iteration
1). 導(dǎo)入collection模塊的Lterable類型,使用isinstance(,Iterable)來(lái)判斷是否可以迭代;
2). 對(duì)于List想要實(shí)現(xiàn)索引-值,python內(nèi)置函數(shù)enumerate可以把列表變成此種格式;
3). 可以引用變量來(lái)輸出內(nèi)容
"""
print isinstance("abc",Iterable)
print isinstance('abc',Iterable)
print isinstance(['a','c','v','f'],Iterable)
print isinstance((1,2,3,4,'t'),Iterable)
print isinstance(123,Iterable)
for index,value in enumerate(['a','c',1,2,3]):
print index,value
for i in (1,2,3):
print i
a = 'w'
for i in [(1,2),('2',a,'y'),a]:
print i
for x,y,z in [(1,2,3),(a,'2','0')]:
print x,y,z
print "---------------------------END---------------------------"
"""
3. 列表生成式List Comprehensions
1). range(1,11)表示從1開(kāi)始泊脐,到11但不包含11
2). [x*x for x in range(1,11)],寫(xiě)列表生成式時(shí)空幻,把要生成的元素x * x放到前面,后面跟for循環(huán)容客,就可以把list創(chuàng)建出來(lái)
3). 除了2)中的方法之外可以使用if等條件或者循環(huán)語(yǔ)句判斷寫(xiě)列表生成式
4). 可以使用兩層循環(huán)寫(xiě)列表生成式
5). dict中的iteritems遍歷字典中的數(shù)據(jù)
6). 把List中所有的字符串變成小寫(xiě)秕铛,首先要判斷是不是字符串,不是字符串會(huì)報(bào)錯(cuò)
"""
print range(1,11)
print [x*x for x in range(1,11)]
print [x*x for x in range(1,5) if x%2!=0]
print [x/y for x in range(0,4) for y in range(1,3)]
print [(x,y) for x in range(0,4) if x%2==0 for y in range(1,3) if y!=1]
myDict = {'1':'a','2':'A'}
for i in myDict.iteritems():
print type(i)
print i
for i,j in myDict.iteritems():
print type(i)
print i
for i in ['HELL','12H',12]:
if isinstance(i,str):
print i.lower()
else:
print i
print "---------------------------END---------------------------"
"""
4. 生成器:一邊循環(huán)一邊計(jì)算的機(jī)制缩挑,稱為生成器(Generator)
1). 把一個(gè)列表生成式的[]改成()但两,就創(chuàng)建了一個(gè)generator
2). 創(chuàng)建L和g的區(qū)別僅在于最外層的[]和(),L是一個(gè)list供置,而g是一個(gè)generator
3). yield關(guān)鍵字,generator的函數(shù)谨湘,在每次調(diào)用next()的時(shí)候執(zhí)行,遇到y(tǒng)ield語(yǔ)句返回芥丧,再次執(zhí)行時(shí)從上次返回的yield語(yǔ)句處繼續(xù)執(zhí)行紧阔。
4).
"""
myGenerator = (x*2 for x in range(1,10) if x%2==0)
for i in myGenerator:
print i
print "*****"
def fib(max):
n,a,b = 0,0,1
while n