一、概要
到目前为止,我们如果想保存一些数据,只能通过变量。但是如果遇到较多的数据要保存,这个时候时候用变量就变的不太现实。我们需要能够保存大量数据的类似变量的东东,这种东东就是数据结构(Data Structures)。
数据结构,它们只是一种结构,能够将一些数据聚合在一起的结构。换句话说,它们是用来存储一系列相关数据的容器。
python 提供了 4 种内置数据结构:
List
(列表)、Tuple(元组)
、Dictionary
(字典)、Set
(集合)严格来说,字符串也是一种数据结构,因为他把字符组织在了一起。
二、列表简介
list
python 中一般把它翻译为列表.
list
是处理一组有序数据的数据结构,即你可以在一个列表中存储一个序列的数据,
list
是 python 中用途最广的一种数据结构。
list
可以存储多个数据,这些数据用[ ]
包裹,各个数据之间用,
分割。
list
中的元素可以是任意类型的,但是实际使用的时,一个list
中一般只存储一种数据类型的数据。
list
中可以存储的元素是有顺序的,且允许重复。
list
中的元素也可以更改。
三、如何定义
1、语法结构
[元素1, 元素2, 元素3, ...]
2、结构图
image3、说明
- 列表是写在⽅括号[] 之间
- ⽤**逗号 ** , 分隔开的元素列表
- 列表中元素的类型可以是不相同
- 示例代码
list = ["小花","小明",18,5000.00,"武汉市高新区"]
四、获取元素
1、通过索引
- 语法格式
list[index]
- 参数说明
- index
表示列表中元素的下标(或者理解为位置,从0开始。到长度-1。不能越界)
- index
- 示例代码
info_list = ["小花", "小明", 18, 5000.00, "武汉市高新区"] print(info_list[0]) #输出 '小花' print(info_list[1]) #输出 '小明' print(info_list[-1]) #输出 "武汉市高新区" 倒数第一个 print(info_list[6]) # 输出错误 """ Traceback (most recent call last): File "list.py", line 6, in <module> print(info_list[6]) IndexError: list index out of range """
2、通过for循环
- 语法格式
for 变量名 in 列表: print(变量名) # 就是打印输出列表中的每一个元素
- 示例代码
info_list = ["小花", 18, 5000.00, "武汉市高新区"] for item in info_list: print(item) 小花 18 5000.0 武汉市高新区
3、通过whille
- 语法格式
index = 0 while index < len(列表) : #通过索引获取列表的中的元素 print(列表[index]) index +=1
- 示例代码
info_list = ["小花",18,5000.00,"武汉市高新区"] index = 0 while index < len(列表): print(info_list[index]) index += 1
4、通过切片
- 语法格式
list(eg,end,delta)
- 说明
截取部分元素 - 参数
- eg(起始下标)
- end(终止下标)
- delta(变化量)
- 返回值
返回一个所有截取的值,生成一个新的列表,不影响原来的列表 - 示例代码
注意:num_list = [1,2,3,4,5,6,7,8,9] print(num_list[0:3]) #截取第一位到第三位的元素 输出结果 [1, 2, 3] print (num_list[:]) #截取列表的全部 输出结果[1,2,3,4,5,6,7,8,9] print (num_list[0:3]) #截取列表的全部 输出结果[1, 2, 3] print (num_list[6:]) #截取第七个元素到结尾 输出结果[7, 8, 9] print (num_list[:-3]) #截取从头开始到倒数第三个元素之前 输出结果[1, 2, 3, 4, 5, 6] print (num_list[2]) #截取第三个元素 输出结果[3] print (num_list[-1]) #截取倒数第一个元素 输出结果[9] print (num_list[-3:-1]) #截取倒数第三位与倒数第一位之前的元素 输出结果[7, 8] print (num_list[-3:]) #截取倒数第三位到结尾 输出结果[7, 8, 9] print (num_list[:-5:-3])#逆序截取 输出结果[9, 6]
所有的切片操作都是返回一个新的list
,所以我们可以通过切片非常轻松的 copy 一个list
五、添加元素
1、append
- 语法格式
list.append(obj)
- 说明
向list
的末尾添加元素,参数obj - 参数
要添加的对象 - 返回值
无返回值,修改原来的列表 - 示例代码
nums = [10, 20, 40, 30, 25] nums.append(1000) print(nums)
2、insert
- 语法格式
list.insert(index, obj)
- 说明
把元素ele
插入到指定的index
位置。原来的元素会自动右移动 - 参数
- index -- 对象 obj 需要插入的索引位置。
- obj -- 要插入列表中的对象
- 返回值
没有返回值,修改原来的列表 - 示例代码
nums = [10, 20, 40, 30, 25] nums.insert(2, 2000) print(nums)
3、extend
- 语法格式
list.extend(seq)
- 说明
用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) - 参数
元素列表 - 返回值
没有返回值,但会在已存在的列表中添加新的列表内容。 - 示例代码
it = ['Python', 'Java', 'JavaScript'] it2 = ['H5','Androi','IOS'] it.extend(it2) print(it) ['Python', 'Java', 'JavaScript', 'H5', 'Androi', 'IOS']
六、删除元素
5.1、del
- 语法格式
del 列表[索引]
- 说明
可以删除指定下标的值,del
关键字本质上是用来将一个变量从内存中删除的。 - 返回值
无 - 示例代码
nums = [10, 20, 40, 30, 25] del nums[0] print(nums) del nums[0:2] print(nums)
5.2、pop
- 语法格式
列表.pop([index])
- 说明
移除列表中的一个元素(默认最后一个元素),并且返回该删除元素的值 - 返回值
该方法返回从列表中移除的元素对象。 - 示例代码
nums = [10, 20, 40, 30, 25] #pop 指定位置删除 del_value = nums.pop(0) # 删除最后⼀个 last_value = nums.pop() print(lastvalue)
5.3、remove
- 语法格式
list.remove(obj)
- 说明
移除列表中某个值的第一个匹配项 没有会抛异常 - 返回值
无返回值 - 示例代码
nums = [10, 20, 40, 30, 25,10] nums.remove(10)#移除指定位置 print(nums) nums.remove(100) #移除不存在的 抛出异常 [20, 40, 30, 25, 10]
5.4、clear
- 语法
list.clear()
- 说明
清空列表中所有的元素 - 参数
无 - 返回值
无 - 示例代码
nums = [10, 20, 40, 30, 25,10] nums.clear() print(nums) [] nums2 = [10, 20, 40, 30, 25,10,[1,2,3,4]] nums2.clear() print(nums2) []
6、修改元素
6.1、通过定位到下标直接修改
- 语法格式
list[索引] = 值
- 示例代码
cities =['上海','北京','广州'] cities[0] = '深圳' cities[1] = '武汉' cities[-1] = '长沙' print(cities) ['深圳', '武汉', '长沙']
七、其它函数
1、list
- 语法格式
list( seq )
- 说明
将元组转换为列表 - 参数
要转换为列表的元组 - 返回值
返回列表 - 示例代码
str = 'abcdefjg' strs = list(str) print(strs) ['a', 'b', 'c', 'd', 'e', 'f', 'j', 'g']
2、sort
- 语法格式
list.sort([func])
- 说明
对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数 - 参数
如果指定了该参数会使用该参数的方法进行排序 - 返回值
该方法没有返回值,但是会对列表的对象进行排序 - 注意事项
python3.0不允许不同数据类型进行排序 - 示例代码
nums = [1,2,1,3,1,5,6,6]; nums.sort()#默认按照ASCII表先后顺序排序 #[1, 1, 1, 2, 3, 5, 6, 6] print(nums) cars = ['Lamborghini','maybach', 'Ferrari', 'Bentley'] cars.sort(key=len) # 默认第一原则 字符串从短到长排序,第二原则ASCII表先后顺序 print(cars) # ['maybach', 'Ferrari', 'Bentley', 'Lamborghini']
# python3.0不允许不同数据类型进行排序 a = ['x', 'y', 1, 2] a.sort() """ TypeError: '<' not supported between instances of 'int' and 'str' """
3、count
- 语法格式
list.count(obj)
- 说明
统计某个元素在列表中出现的次数 - 参数
- obj
列表中统计的对象
- obj
- 返回值
返回元素在列表中出现的次数 - 示例代码
aList = [1,2,1,3,1,5,6,6]; count = aList.count(1) count = aList.count(6) print(count) 3 2
八、嵌套列表
1、说明
嵌套的意思是,列表中的元素也可以是列表。因为列表中的元素可以是任意类型,所以嵌套也是很容易理解的
2、示例代码
nums = [[1, 2], [3, 4], [20, 10]]
shops = [['mate','牛逼',5000.00],['IPhone','装逼',8000.00],['三星','傻逼',1000.00]]
九、列表推到
1、简介
列表推导,有人也叫列表包含。他提供了一种更加简洁的方式去创建列表。
2、语法格式
list = [表达式 for 变量 in 列表] list = [表达式 for 变量 in 列表 if 条件]
3、说明
会对序列中的每个 item 执行表达式, 然后把满足条件的值存入到一个新的列表中
4、示例代码
- 生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))
nums = list(range(1, 11)) print(nums) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- 求一个数的3次方
nums = [n**3 for n in range(10)] print(nums)
- 求30以内能被3整除的数
multiples = [i for i in range(30) if i % 3 is 0] print(multiples) [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
- 遍历文件
#常规代码 import os import os files = [] for file in os.listdir('/Users/zhangwei/work/ipython/demo1'): if file.endswith('.py'): files.append(file) print(files) 简化 import os files = [file for file in os.listdir('/Users/zhangwei/work/ipython/demo1') if file.endswith(".py") ] #或者 import os files = [file.endswith(".py") for file in os.listdir("/Users/zhangwei/work/ipython/demo1")]
- 推导也支持
for 的嵌套
s1 = ["a", "b", "c"] s2 = [20, 30] s3 = [x + str(y) for x in s1 for y in s2] print(s3) (x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8
- 模拟多个掷硬币事件
from random import random results = [] for x in range(10): results.append(int(round(random()))) #简化 results = [int(round(random())) for x in range(10)]
网友评论