listpython 中一般把它翻译为列表.
list 是 python 中用途最广的一种数据结构。
list 可以存储多个数据,这些数据用 [ ] 包裹,各个数据之间用 , 分割。
list中的元素可以是任意类型的,但是实际使用的时,一个list 中一般只存储一种数据类型的数据。
list 中可以存储的元素是有顺序的,且允许重复。
list 中的元素也可以更改。
内置函数 len 也可以获取到 list 的长度
和字符串一样,list 也支持索引读取和切片。其实内置的序列类型都支持这样的操作
nums = [10, 20, 40, 30, 25] print(nums[1]) print(nums[-3]) print(nums[:3]) print(nums[1:])注意:
所有的切片操作都是返回一个新的 list ,所以我们可以通过切片非常轻松的 copy 一个list
nums = [10, 20, 40, 30, 25] new_nums = nums[:] # 复制 list nums print(new_nums)注意: 这里的复制是浅复制. 其实以后你会发现在, 几乎所有的复制都是浅复制, 如果要深复制, 需要自己递归实现.
list 可以像字符串那样通过 + 连接。得到的新的 list 包含了参与运算的两个 list 中所有元素
nums1 = [10, 20, 40, 30, 25] nums2 = [100, 200] num12 = nums1 + nums2 print(num12)list 和字符串不太一样。字符串是不可变的。 而list 是可变的。
我们可以通过索引去更改指定索引位置的元素的值
nums1 = [10, 20, 40, 30, 25] nums1[2] = 200 print(nums1)list.append(value) 向 list 的末尾添加元素
list.pop([index]) 把指定索引位置的元素删除. 如果不传入参数就是删除最后一个元素
list.insert(index, ele) 把元素 ele 插入到指定的 index 位置。原来的元素会自动右移动
nums1 = [10, 20, 40, 30, 25] nums1.append(1000) print(nums1) nums1.pop(0) print(nums1) nums1.insert(2, 2000) print(nums1)还有一种删除元素的办法:使用 del 运算符
nums1 = [10, 20, 40, 30, 25] del nums1[0] print(nums1) del nums1[0:2] print(nums1)通过切片也可以修改 list 中的元素,甚至清空 list
nums1 = [10, 20, 40, 30, 25] nums1[:2] = ["A", "B", "C"] # 下标0、1的元素用 ["A", "B", "C"] 去替换 print(nums1) nums1[:] = [] # clear list print(nums1)嵌套的意思是,列表中的元素也可以是列表。
因为列表中的元素可以是任意类型,所以嵌套也是很容易理解的。
nums = [[1, 2], [3, 4], [20, 10]] print(nums) print(nums[0][0]) print(nums[1][1])列表推导,有人也叫列表包含。
他提供了一种更加简洁的方式去创建列表。
列表推导的语法:
[表达式 for item in 序列]说明:
会对序列中的每个 item 执行表达式, 然后把值存入到一个新的列表中.
上面的代码相当于:
nums = [] for x in range(10): nums.append(x ** 3)列表推导的时候也可以添加条件
nums = [x ** 2 for x in range(20) if x % 2 == 0] print(nums)列表推导也支持for 的嵌套
s1 = ["a", "b", "c"] s2 = [20, 30] s3 = [x + str(y) for x in s1 for y in s2] print(s3)注意:
得到的列表的长度是一种笛卡尔积. 也就是说新列表的长度是原列表的长度的乘积.
通过以上的学习,我们可以看到str和list有许多通用的特点:都支持索引和切片
由于字符串是不可变对象,所以字符串没有删除的操作。list是可变的,所以提供了删除的操作。
