今天进入高级特性的学习啦,其实就是怎么能更简单的写代码。
记住一个关键就是切片的时候含头不含尾!!!
python
list = ['one', 'two', 'three', 'four', 'five'] # 取出该list的前三个元素组成一个新的list print(list[0: 3]) 运行结果: ['one', 'two', 'three']
list[0:3]
表示,从索引0
开始取,直到索引3
为止,但不包括索引3
。即索引0
,1
,2
,正好是3个元素。0
的话,仍是能够省略的。list = ['one', 'two', 'three', 'four', 'five'] # 取出该list的前三个元素组成一个新的list print(list[: 3]) 运行结果: ['one', 'two', 'three']
-1
。list = ['one', 'two', 'three', 'four', 'five'] # 取出该list倒数第三个以前全部元素组成一个新的list print(list[: -3]) 运行结果: ['one', 'two']
list = ['one', 'two', 'three', 'four', 'five'] # 全部的元素里面每隔两个取一个元素 print(list[::2]) 运行结果: ['one', 'three', 'five']
经过for循环遍历一个list。函数
list = ['one', 'two', 'three', 'four', 'five'] for value in list: # 将list中每个元素都打印出来 print(value) 运行结果: one two three four five
能够遍历字典的key和value:学习
y = {'a': 1, 'b': 2, 'c': 3} for a in y.keys(): print(a) for b in y.values(): print(b) 运行结果: a b c 1 2 3
列表生成式即List Comprehensions,是Python内置的很是简单却强大的能够用来建立list的生成式。
python range()
函数可建立一个整数列表,通常用在 for 循环中。code
# 若是是单纯生成一个整数列表,那么咱们直接使用range()就能够了,但是若是咱们须要生成复杂的话就须要列表生成式了。 # 生成一个1到10的list l = range(1,11) print(l) # 生成一个1到10的平方的list t = [x * x for x in range(1, 11)] print(t) 运行结果: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
还能够生成更复杂更多条件的列表对象
# 生成一个1到10中偶数的平方list l = [x * x for x in range(1, 11) if x % 2 == 0] print(l) 运行结果: [4, 16, 36, 64, 100]
经过列表生成器咱们能够生成符合要求的全部列表,但是若是咱们想要生成一个很是大的列表的话要怎么办呢?
在Python中,有种一边循环一边计算的机制,称为生成器:generator
。索引
# 建立一个list l = [x * x for x in range(1,11) if x % 2 == 0] print(l) # 建立一个generator g = (x * x for x in range(1,11) if x % 2 == 0) print(g) 运行结果: [4, 16, 36, 64, 100] <generator object <genexpr> at 0x000001C600C81B30>
建立L
和g
的区别仅在于最外层的[]
和()
,L
是一个list,而g
是一个generator。three
打印generator元素可使用next(g),每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。字符串
g = (x * x for x in range(1, 11) if x % 2 == 0) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) 运行结果: 4 16 36 64 100 Traceback (most recent call last): File "D:/WorkSpace/Study/pythonTest/dataType.py", line 7, in <module> print(next(g)) StopIteration
固然也可使用for循环进行迭代,不会有任何异常。get
g = (x * x for x in range(1, 11) if x % 2 == 0) for value in g: print(value) 运行结果: 4 16 36 64 100
能够被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator
。
可使用isinstance()
判断一个对象是不是Iterator
对象:generator
a = isinstance((x for x in range(10)), Iterator) print(a) a = isinstance([], Iterator) print(a) a = isinstance({}, Iterator) print(a) a = isinstance('abcd', Iterator) print(a) 运行结果: True False False False
for
循环的对象都是Iterable
类型;next()
函数的对象都是Iterator
类型,它们表示一个惰性计算的序列;list
、dict
、str
等是Iterable
但不是Iterator
,不过能够经过iter()
函数得到一个Iterator
对象。# 经过iter()得到一个Iterator对象 a = isinstance(iter([]), Iterator) print(a) a = isinstance(iter({}), Iterator) print(a) a = isinstance(iter('abcd'), Iterator) print(a) 运行结果: True True True