ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # list列表[] 有序的对象集合 Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。 比如,列出班里所有同学的名字,就可以用一个list表示: ~~~ >>> classmates = ['Michael', 'Bob', 'Tracy'] >>> classmates ['Michael', 'Bob', 'Tracy'] ~~~ 变量classmates就是一个list。 ## 查 python中查找的常用方法为: * in(存在),如果存在那么结果为true,否则为false * not in(不存在),如果不存在那么结果为true,否则false **in,not ni** ~~~ nameList = ['xiaoWang','xiaoZhang','xiaoHua'] #获取用户要查找的名字 findName = input('请输入要查找的姓名:') #查找是否存在 if findName in nameList: print('在字典中找到了相同的名字') else: print('没有找到') ~~~ **len()** `len()`获得list元素的个数: ~~~ >>> len(classmates) 3 ~~~ 用索引来访问list中每一个位置的元素,记得索引是从0开始的: ~~~ >>> classmates[0] 'Michael' >>> classmates[3] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range ~~~ 当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得**最后一个元素的索引是`len(classmates) - 1`** 如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素: ~~~ >>> classmates[-1] 'Tracy' ~~~ **index, count** index和count与字符串中的用法相同 index() 函数用于从列表中找出某个值第一个匹配项的索引位置 ~~~ aList = [123, 'xyz', 'zara', 'abc']; print "Index for xyz : ", aList.index( 'xyz' ) ; print "Index for zara : ", aList.index( 'zara' ) ; ~~~ 在指定范围中查找,**注意找不到会报错** ~~~ >>> a = ['a', 'b', 'c', 'a', 'b'] >>> a.index('a', 1, 3) # 注意是左闭右开区间,这边是没有,在这个范围中查找 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: 'a' is not in list >>> a.index('a', 1, 4) 3 ~~~ 要count统计这个元素出现几次 ~~~ >>> a.count('b') 2 >>> a.count('d') 0 ~~~ ## 增 **append** 追加元素到末尾 ~~~ >>> classmates.append('Adam') >>> classmates ['Michael', 'Bob', 'Tracy', 'Adam'] ~~~ **insert** 元素插入到指定的位置 ~~~ >>> classmates.insert(1, 'Jack') >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam'] ~~~ ~~~ >>> classmates.insert(17,'hello') >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam', 'hello'] ~~~ **extend** 2个list合并,重复的都会有 ~~~ names = ['php', 'php', 'java', 'c/c++', 'shell'] str = ['hello', 'world', 'php', 'java'] names.extend(str) print(names) ~~~ 输出 ~~~ ['php', 'php', 'java', 'c/c++', 'shell', 'hello', 'world', 'php', 'java'] ~~~ ## 删 * del:根据下标进行删除 * pop:删除最后一个元素 * remove:根据元素的值进行删除 **del** ~~~ movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情'] print('------删除之前------') for tempName in movieName: print(tempName) del movieName[2] print('------删除之后------') for tempName in movieName: print(tempName) ~~~ **pop** 删除list末尾的元素,返回被删除的元素 ~~~ >>> classmates.pop() 'Adam' >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy'] ~~~ 删除指定位置的元素,用pop(i)方法,其中i是索引位置 ~~~ >>> classmates.pop(1) 'Jack' >>> classmates ['Michael', 'Bob', 'Tracy'] ~~~ **remove** ~~~ movieName = ['加勒比海盗','骇客帝国','第一滴血','指环王','霍比特人','速度与激情'] print('------删除之前------') for tempName in movieName: print(tempName) movieName.remove('指环王') print('------删除之后------') for tempName in movieName: print(tempName) ~~~ ## 改 要把某个元素替换成别的元素,可以直接赋值给对应的索引位置: ~~~ >>> classmates[1] = 'Sarah' >>> classmates ['Michael', 'Sarah', 'Tracy'] ~~~ list元素也可以是另一个list,比如: ~~~ >>> s = ['python', 'java', ['asp', 'php'], 'scheme'] >>> len(s) 4 ~~~ 要注意s只有4个元素,其中`s[2]`又是一个list,如果拆开写就更容易理解了: ~~~ >>> p = ['asp', 'php'] >>> s = ['python', 'java', p, 'scheme'] ~~~ 要拿到'php'可以写`p[1]`或者`s[2][1]`,因此s可以看成是一个二维数组,类似的还有三维、四维……数组,不过很少用到。 如果一个list中一个元素也没有,就是一个空的list,它的长度为0: ~~~ >>> L = [] >>> len(L) 0 ~~~ ## 排序 **sort, reverse** sort方法是将list按特定顺序重新排列,默认为由小到大,参数`reverse=True`可改为倒序,由大到小 reverse方法是将list逆置 `列表.sort() 升序排序` `列表.sort(reverse=True) 降序排序` `列表.reverse() 逆序,反转` ~~~ >>> a = [1, 4, 2, 3] >>> a [1, 4, 2, 3] >>> a.reverse() >>> a [3, 2, 4, 1] >>> a.sort() >>> a [1, 2, 3, 4] >>> a.sort(reverse=True) >>> a [4, 3, 2, 1] ~~~ ## 遍历 sort()方法语法: ~~~ list.sort(cmp=None, key=None, reverse=False) ~~~ 参数 ~~~ cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。 key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认) ~~~ ~~~ # 获取列表的第二个元素 def takeSecond(elem): return elem[1] # 列表 random = [(2, 2), (3, 4), (4, 1), (1, 3)] # 指定第二个元素排序 random.sort(key=takeSecond) ~~~ ~~~ >>> chars = ['a', 'b', 'c', 'd'] >>> i = 0 >>> for chr in chars: ... print("%d %s"%(i, chr)) ... i += 1 ... 0 a 1 b 2 c 3 d ~~~ enumerate() ~~~ >>> chars = ['a', 'b', 'c', 'd'] >>> for i, chr in enumerate(chars): ... print(i, chr) ... 0 a 1 b 2 c 3 d ~~~ ## 列表转换为字符串 join()方法: **里面元素必须是str,不然报错** 此方法用法与字符串的join方法一样,就是将列表里的元素用指定字符连接起来,字符可以是空格,可以是空字符,可以是下划线以及任意字符,如下: ~~~ a = ['1', '2', '3'] c = ''.join(a) print(c) # 123 ~~~ # tuple元组() 另一种有序列表叫元组:tuple。tuple和list非常类似,但是**tuple一旦初始化就不能修改** **元组使用小括号,列表使用方括号** ~~~ >>> classmates = ('Michael', 'Bob', 'Tracy') ~~~ 现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用`classmates[0]`,`classmates[-1]`,但不能赋值成另外的元素。 不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。 tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如: ~~~ >>> t = (1, 2) >>> t (1, 2) ~~~ 如果要定义一个空的tuple,可以写成(): ~~~ >>> t = () >>> t () ~~~ 但是,要定义一个只有1个元素的tuple,如果你这么定义: ~~~ >>> t = (1) >>> t 1 ~~~ 定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。 **所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义**