这篇文章开始介绍Python中的容器。Python容器包括列表、元组、集合与字典。这些数据结构中都涉及到不少的方法,这里对比较经常使用的一些方法进行介绍,不用每一个方法都记住,熟悉经常使用的便可。python
首先,咱们先来看列表。数组
# -*- coding: utf-8 -*- # __author : Demon # date : 1/16/18 8:19 PM # 列表的建立 empty_list_01 = [] # 建立一个空的列表 empty_list_02 = list() # 建立一个空的列表 num_list = [1, 2, 3, 4, 5] # 建立一个数字列表 str_list = ['a', 'b', 'c'] # 建立一个字符串列表 mix_list = [1, 'a', 'abc'] # 一个列表中可包含元素类型不是固定的 nest_list = [num_list, str_list, mix_list] # 列表能够嵌套 print(num_list) # [1, 2, 3, 4, 5] print(str_list) # ['a', 'b', 'c'] # 由打印结果能够看出列表的存储是有顺序的 # 即怎么存的就怎么取 print(num_list[0]) # 列表接受下标访问,相似于JAVA中的数组 1 print(num_list[1]) # 列表接受下标访问,相似于JAVA中的数组 2 print(num_list[2]) # 列表接受下标访问,相似于JAVA中的数组 3 print(num_list[3]) # 列表接受下标访问,相似于JAVA中的数组 4 print(num_list[4]) # 列表接受下标访问,相似于JAVA中的数组 5 # 一旦超出长度,就会抛出异常 # print(num_list[5]) # IndexError: list index out of range
# -*- coding: utf-8 -*- # __author : Demon # date : 1/16/18 8:19 PM # 1. 列表的循环方式【重要】 num_list = [1, 2, 3, 4, 5] # 建立一个数字列表 for num in num_list: print(num, end="") # 123456 print() # 2. 求长度 num_list = [1, 2, 3, 4, 5] # 建立一个数字列表 print(len(num_list)) # 5 # 3. 判断列表是否为空【重要】 empty_list = list() num_list = [1, 2, 3] # 利用非0即True的原则【推荐方法】 if not empty_list: # 若是列表为空 print("The list is empty") else: print("The list is not empty") # 利用长度 if not len(num_list): print("The list is empty") else: print("The list is not empty") # 4. 判断元素是否存在【重要】 num_list = [1, 2, 3] if 2 in num_list: print("in") else: print("not in") # 5. append(ele) 尾端添加元素 empty_list = [] # 建立一个空的列表 for s in "Hello": empty_list.append(s) print(empty_list) # ['H', 'e', 'l', 'l', 'o'] # 上述代码也是将字符串转换为列表的一种方式,只是代码比较复杂 # 6. 列表切片的用法,如字符串切片的用法相似【重要】 # 用法 list[start:end:step] # start可省略,默认值为0 # end可省略,默认为最大长度 # step可省略,默认为1 # 范围是[start, end),即左闭右开 str_list = ['a', 'b', 'c'] # 建立一个字符串列表 # 获取整个list, ['a', 'b', 'c'] print(str_list[::]) print(str_list[0:]) print(str_list[:3]) print(str_list[:200]) # 长度超出时,不会报错 # 获取部分 print(str_list[0:2]) # ['a', 'b'] print(str_list[0:2:2]) # ['a'] # 7.sort排序【重要】 # 注意这个方法没有返回值,是在原列表上进行修改 str_list = ["adfas", "dsdfw", "nklo"] str_list.sort() print(str_list) # ['adfas', 'dsdfw', 'nklo'] # 8.insert(pos, ele) 在指定位置插入元素 str_list = ['a', 'b', 'c'] # 建立一个字符串列表 str_list.insert(2, "we") # ['a', 'b', 'we', 'c'] print(str_list) # 若是位置超出长度,不会报错,会在尾部插入 str_list.insert(20, "we") # [['a', 'b', 'we', 'c', 'we'] print(str_list) # 9.del(pos) 删除指定位置的元素 # 须要注意这个方法不是经过列表.调用的 # 能够相似理解为,它不是列表这个类中的方法 str_list = ['a', 'b', 'c'] # 建立一个字符串列表 del str_list[0] print(str_list) # ['b', 'c'] # del str_list[20] # IndexError: list assignment index out of range # 10.extend(list)或+=合并 num_list = [1, 2] str_list = ["a", "b"] print(str_list + num_list) # ['a', 'b', 1, 2] # 11.remove(ele) 删除指定值 str_list = ['a', 'b', 'c'] # 建立一个字符串列表 str_list.remove("a") print(str_list) # ['b', 'c'] # str_list.remove("d") # ValueError: list.remove(x): x not in list # 12.pop(pos) 删除指定位置的元素 str_list = ['a', 'b', 'c'] # 建立一个字符串列表 # str_val = str_list.pop(100) # IndexError: pop index out of range str_val = str_list.pop(0) print(str_val) # a print(str_list) # ['b', 'c'] # 13.reverse() 反转,见练习 # 14.count(ele)方法查看某个元素出现的次数 str_list = ['abc', 'b', 'c', "abc"] print(str_list.count("abc")) # 2
其余形式转列表,采用list(otherType)的方法。能够转列表的类型有:字符串,元组等,以下代码所示:微信
str_01 = "abc" print(list(str_01)) # ['a', 'b', 'c'] tuple_01 = (1, 2, 3) print(list(tuple_01)) # [1, 2, 3]
列表转其余形式,一般看其余形式是怎么支持转换。其中比较灵活的是列表转字符串,采用join的方法,以下代码所示:数据结构
str_list = ["a", "b", "c"] print(",".join(str_list)) # a,b,c print("".join(str_list)) # abc
列表转字符串须要注意:app
num_list = [1, 2, 3] # print("".join(num_list)) # TypeError: sequence item 0: expected str instance, int found
常见的有关列表的练习题:函数
num_list = [1, 2, 3] #方式一:调用列表的reverse()方法 num_list.reverse() print(num_list) # [3, 2, 1] # 方式二:使用切片 num_list = [1, 2, 3] for num in num_list[::-1]: print(num) #若是须要[3, 2, 1]这样的格式 num_list = [1, 2, 3] print("[", end="") for num in num_list[:0:-1]: print(num, end=", ") if not num_list: # 若是列表为空 print("]") else: print("%d]" % num_list[0])
2.如何将列表拷贝到别一个列表中spa
nest_list = [1, 2, 3, ['a', 'b', 'c']] new_nest_list = nest_list # 直接赋值拷贝 print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c']] new_nest_list.append("4") print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c'], '4'] print(nest_list) # [1, 2, 3, ['a', 'b', 'c'], '4'] # 直接赋值的拷贝会影响原来的列表,是一种浅拷贝 nest_list = [1, 2, 3, ['a', 'b', 'c']] new_nest_list = nest_list[::] # 切片 print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c']] new_nest_list.append("4") print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c'], '4'] print(nest_list) # [1, 2, 3, ['a', 'b', 'c']] nest_list[-1].append("d") print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c', 'd'], '4'] print(nest_list) # [1, 2, 3, ['a', 'b', 'c', 'd']] # 使用切片,改变最外层对原列表没有影响,而内层是有影响的。这也是一种浅拷贝 nest_list = [1, 2, 3, ['a', 'b', 'c']] new_nest_list = nest_list.copy() # 使用copy方法 print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c']] new_nest_list.append("4") print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c'], '4'] print(nest_list) # [1, 2, 3, ['a', 'b', 'c']] nest_list[-1].append("d") print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c', 'd'], '4'] print(nest_list) # [1, 2, 3, ['a', 'b', 'c', 'd']] # 使用copy,改变最外层对原列表没有影响,而内层是有影响的。这也是一种浅拷贝 # 若是想要实现深拷贝,须要使用copy模块中的deepcopy方法,详见<python中的深拷贝与浅拷贝>一文
3.列表的排序code
列表的简单排序一般使用list.sort()方法。 可是这个sort方法使用会相对比较灵活。它的完整定义以下:
sort(*, key=None, reverse=False)
key指定一个函数名,而且这个函数只能接受一个参数
reverse指定排序的方式排序
x = ['bc', 'essmm', 'mdsfm', 'ss' ] x.sort(key=str.lower) print(x) # ['bc', 'essmm', 'mdsfm', 'ss'] y = [3, 2, 8, 0, 1] y.sort(reverse=True) print(y) # [8, 3, 2, 1, 0]
能够发现,使用list.sort()方法进行排序,是调用的列表中自带的方法,而且它是做用于原列表,并无返回值。若是咱们想要获得一个新的排好序的列表,则须要使用到sorted()方法。这个方法十分灵活,后面将再分专题进行介绍。utf-8
微信搜索公众号: 帕森与加瓦 可关注后续文章