序列
序列包含列表、元组、字符串,它们有很多相同点:
① 都可以通过索引得到每一个元素
② 默认索引值总是从0开始
③ 可以通过分片的方法得到一个范围内的元素的集合
④ 有很多共同的操作符
下面介绍关于序列的常用的BIF
1.list([iterable]):将一个可迭代对象转换为列表
所谓的迭代就是重复反馈过程的活动,其目的通常是为了接近并达到所需的目标和结果,每一次对过程的重复被称为一次"迭代",而每一次迭代的到的结果会被用来做为下一次迭代的初始值,就目前而言,迭代还就是循环
>>> a = list() >>> a [] >>> b = list("Hello") >>> b ['H', 'e', 'l', 'l', 'o'] >>> c = list((1,2,3,4,5,8,13)) >>> c [1, 2, 3, 4, 5, 8, 13] >>>
2.tuple([iterable]):将一个可迭代对象转换成元组
用法与list一样
3.str(obj):将obj对象转换成字符串
前面说过,不多说
4.len(sub):返回sub参数的长度
>>> str1 = "I love python" >>> len(str1) 13 >>> list1 = [1,2,3,4,5,9,13] >>> len(list1) 7 >>> tuple1 = "这","是","一","个","元","组" >>> len(tuple1) 6 >>>
5.max(...):用于返回序列或者参数集合中的最大值
>>> list1 = [1,9,15,100,66,88,99,51,54,-56,-12,33] >>> max(list1) 100 >>> list1 = "I love python" >>> max(list1) 'y' >>> max(5,8,9,1,3,13,18,20,66,11) 66 >>>
6.min(...):方法与max一样,效果相反,返回序列或参数集合中的最小值
注意的是使用max和min方法都要保证序列或参数集合中的数据类型统一,否则会出错
>>> list1 =[1,5,9,6,8] >>> list1.append("x") >>> max(list1) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: '>' not supported between instances of 'str' and 'int'
>>> min(123,'oo',456,'xx') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: '<' not supported between instances of 'str' and 'int' >>>
推倒出min()方法的代码:
def min(x): least = x[0] for each in x: if each < least: least = each return least
max()方法的代码:
def max(x): maximum = x[0] for each in x: if each > maximum: maximum = each return maximum
7.sum(iterable[,start]):返回序列iterable的总和,用法与max和min一样
sum有可选参数start,如果设置该参数,表示从该值开始加起,默认值为0
>>> tuple1 = (1,9,5,6,8,1,3) >>> sum(tuple1) 33 >>> sum(tuple1,10) 43 >>>
8.sorted(iterable,key=None,reverse=False):返回一个排序的列表
sort()是实现列表原地排序,sorted()方法是返回一个排序的新列表
>>> list1 = [1,5,9,7,6,3,2,5,4,6] >>> list2 = list1[:] >>> list1.sort() >>> list1 [1, 2, 3, 4, 5, 5, 6, 6, 7, 9] >>> sorted(list2) [1, 2, 3, 4, 5, 5, 6, 6, 7, 9] >>> list2 [1, 5, 9, 7, 6, 3, 2, 5, 4, 6] >>>9.reversed(sequence):用于返回逆向迭代序列的值
效果与列表的内置方法reverse()一致,区别是内建方法是原地反转,而reverse()返回一个翻转后的迭代对象
>>> list1 = [1,5,9,7,6,3,2,5,4,6] >>> reversed(list1) <list_reverseiterator object at 0x00000237A4004A90> >>> for each in reversed(list1): ... print(each,end=',') ... 6,4,5,2,3,6,7,9,5,1,>>> >>> list1 = (1,5,9,7,6,3,2,5,4,6) >>> for each in reversed(list1): ... print(each) ... 6 4 5 2 3 6 7 9 5 1 >>> str1 = "Hello World" >>> for each in reversed(str1): ... print(each) ... d l r o W o l l e H
10.enumerate(iterable):生成有二元组(二元组就就是元素数量为2的元组)构成的迭代对象,每一个二元组有可迭代参数的索引号以及对应元素组成的
>>> str1 = "Hello" >>> enumerate(str1) <enumerate object at 0x00000237A4001A68> >>> for each in enumerate(str1): ... print(each) ... (0, 'H') (1, 'e') (2, 'l') (3, 'l') (4, 'o') >>> list1 = [1,3,5,6,7] >>> for each in enumerate(list1): ... print(each) ... (0, 1) (1, 3) (2, 5) (3, 6) (4, 7) >>> tuple1 = (2,6,8,9,10) >>> for each in enumerate(tuple1): ... print(each) ... (0, 2) (1, 6) (2, 8) (3, 9) (4, 10) >>>11.zip(iter1[,iter2[...]]):用于返回由各个可迭代参数共同组成的元组
>>> list1 = [1,5,9,7,6,3,2,5,4,6] >>> list1 = [1,3,5,6,7] >>> str1 = "Hello" >>> for each in zip(list1,str1): ... print(each) ... (1, 'H') (3, 'e') (5, 'l') (6, 'l') (7, 'o') >>>
>>> tuple1 = (2,6,8,9,10)
>>> for each in zip(list1,str1,tuple1):
... print(each)
...
(1, 'H', 2)
(3, 'e', 6)
(5, 'l', 8)
(6, 'l', 9)
(7, 'o', 10)
>>>
作业题:
1.请问使用什么BIF,可以将一个可迭代对象转换为列表,元组,字符串?
list([iterable]):将一个可迭代对象转换成列表
tuple([iterable]):将一个可迭代对象转换成列表
str(obj):将一个对象转换成字符串
2.迭代的概念
所谓的迭代就是重复反馈过程的活动,其目的通常是为了接近并达到所需的目标和结果,每一次对过程的重复被称为一次"迭代",而每一次迭代的到的结果会被用来做为下一次迭代的初始值。
3.你认为max("I love python"),将会返回什么?
会返回‘y’,因为字符串在计算机中是以ASCII码的形式存储,参数中y对应的ASCII值最大
4.猜想一下min()这个BIF实现的方式
def min(x): least = x[0] for each in x: if each < least: least = each return least
5.sum()参数中如果存在字符串会报错,请无视字符串自动返回结果
def sum(x): result = 0 for each in x: if (type(each)==int) or (type(each)==float): result += each else: continue return result