一、列表是什么
比较正式的解释:
列表是由一系列按特定顺序排列的元素组成,你可以创建包含字母列表中所有字母、数字或者所有家庭成员姓名的列表;也可以将任何东西加入列表中,元素之间可以没有任何联系。
通俗理解:
列表和Java中的数组类似,不过Java中的数组要求数据要保持同一数据类型,而列表没有这个限制。如果把Java中数组比喻成集装箱,那么Python中的列表就相当于工厂,什么都可以往里放,没有数据类型的限制。
和Java中的数组类似,Python的列表用[ ] 来表示列表,元素之间用逗号(英文)隔开。如:
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
二、列表元素的访问
由于列表是一个有序集合,所以我们可以通过索引来访问列表的元素。
索引下标从0开始
如:
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num[3])
Shane
>>> print(num[5][2])
Python
三、列表元素的CRUD
1、修改列表元素
通过索引来修改指定元素的内容:
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> num[2] = 'Study'
>>> print(num)
[1, 2, 'Study', 'Shane', 3.14, [5, 6, 'Python']]
2、添加列表元素
添加元素共有三种方式:
<1>在列表末尾添加元素 – append();
<2>在列表任意位置添加元素 – insert();
<3>同时添加多个元素 – extend();
在列表末尾添加元素 – append()
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> num.append('好好学习')
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python'], '好好学习']
在列表任意位置添加元素 – insert()
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> num.insert(3, '你是最棒的')
>>> print(num)
[1, 2, 3, '你是最棒的', 'Shane', 3.14, [5, 6, 'Python']]
同时添加多个元素 – extend()
本质是两个列表的合并,可以理解为扩容
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> num.extend(['加油', '100'])
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python'], '加油', '100']
3、删除列表元素
删除元素同样有三种方式:
<1>使用del语句删除元素
<2>使用pop()方法删除元素
<3>使用remove()方法删除元素
使用del语句删除元素
根据索引进行删除(需要知道元素的索引)
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> del num[5]
>>> print(num)
[1, 2, 3, 'Shane', 3.14]
使用pop()方法删除元素
Python的列表底层就是数据结构中的栈,这个pop()方法和栈的出栈方法一样:弹出列表末尾的元素,而且我们还可以接着使用这个元素。比如在开发中,我们要将用户从活跃名单中删除,并让他加入到非活跃名单就可以用这个方法。
pop()方法除了可以删除末尾元素,也可以和del语句一样,根据索引删除指定位置的元素
在使用中如果无法确定使用那一个方法来删除,可以根据需求来选择,如果我们要删除一个元素,且以后不会在使用到他,则可以选择del语句,如果还要继续使用,则使用pop()方法。
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> num01 = num.pop()
>>> print(num)
[1, 2, 3, 'Shane', 3.14]
>>> print(num01)
[5, 6, 'Python']
>>> num02 = num.pop(2)
>>> print(num)
[1, 2, 'Shane', 3.14]
>>> print(num02)
3
使用remove()方法删除元素
如果我们只知道元素的值而不知道元素的索引位置,那么我们可以使用remove()方法来删除元素。使用remove()方法删除的元素我们也可以继续使用
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> print(num)
[1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> num.remove('Shane')
>>> print(num)
[1, 2, 3, 3.14, [5, 6, 'Python']]
>>> num03 = 3.14
>>> num.remove(num03)
>>> print(num)
[1, 2, 3, [5, 6, 'Python']]
>>> print(num03)
3.14
4、列表元素的遍历
>>> num = [1, 2, 3, 'Shane', 3.14, [5, 6, 'Python']]
>>> for el in num:
print(el)
1
2
3
Shane
3.14
[5, 6, 'Python']
四、数字列表
1、使用range()创建数字列表
range()可以快速的生成一系列数字,如:
>>> for value in range(1, 5):
print(value)
1
2
3
4
打印了1~4的数字,不包含5.
要创建数字列表,可以使用函数list()将range()的结果直接转换为列表。如果将range()作为list()的参数,输出将为一个数字列表。如:
>>> value = list(range(1, 5))
>>> print(value)
[1, 2, 3, 4]
使用range()函数时,还可以指定步长。比如要打印1~10之间的偶数:
>>> value = list(range(2, 11, 2))
>>> print(value)
[2, 4, 6, 8, 10]
函数range()从2开始,不断加2,直到达到或超过终值(11)。
简单应用:
创建一个列表,其中包含1~10的平方:
nums = []
for value in range(1, 11):
num = value**2
nums.append(num)
print(nums)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2、数字列表的简单统计计算
>>> nums = [1, 3, 2, 4, 6, 34, 67, 2, 4]
>>> min(nums)
1
>>> max(nums)
67
>>> sum(nums)
123
3、列表解析
列表解析将for循环和创建新元素的代码合成一行,并自动附加新元素。
如上例中的创建一个列表,其中包含1~10的平方:
>>> nums = [num**2 for num in range(1 ,11)]
>>> print(nums)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
五、列表切片
1、生成切片
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(nums[0:3])
[1, 3, 2]
>>> print(nums[3:6])
[4, 5, 23]
>>> print(nums[:5])
[1, 3, 2, 4, 5]
>>> print(nums[3:])
[4, 5, 23, 23, 65, 23, 767, 0]
>>> print(nums[-3:])
[23, 767, 0]
1)给定索引范围,可以生成任意位置的切片
2)没有给定起始索引,自动从列表开头开始提取
3)没有给定终止索引,自动在列表末尾终止
4)负数索引返回列表末尾相应距离的元素,可以用这个方法输出列表末尾的任何切片
2、遍历切片
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> for num in nums[:3]:
print(num)
1
3
2
3、复制列表
可以使用切片的方式复制列表,不指定起始索引和终止索引即可复制整个列表。
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> nums01 = nums[:]
>>> print(nums)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(nums01)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
复制之后的列表是一个独立的列表,他们之间的CRUD互不影响。
不使用切片而直接将nums赋值给nums01并不能起到复制效果,他们之间还是指向的同一个列表,元素操作时会相互影响。
六、组织列表
<1>使用sort()方法对列表进行永久性排序
<2>使用sorted()方法对列表进行临时性排序
<3>倒着打印列表
<4>确定列表的长度
1、使用sort()方法对列表进行永久性排序
此方法是永久性的改变了列表的排序顺序,不可逆转
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> nums.sort()
>>> print(nums)
[0, 1, 2, 3, 4, 5, 23, 23, 23, 65, 767]
传递参数reverse=True可以将列表排序后再反转
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> nums.sort(reverse=True)
>>> print(nums)
[767, 65, 23, 23, 23, 5, 4, 3, 2, 1, 0]
2、使用sorted()方法对列表进行临时性排序
sorted()只是临时进行排序,不改变列表的原始顺序
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(nums)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(sorted(nums))
[0, 1, 2, 3, 4, 5, 23, 23, 23, 65, 767]
>>> print(nums)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
同样的,传递参数reverse=True也可以将排序后的列表反转
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(nums)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(sorted(nums))
[0, 1, 2, 3, 4, 5, 23, 23, 23, 65, 767]
>>> print(nums)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(sorted(nums,reverse=True))
[767, 65, 23, 23, 23, 5, 4, 3, 2, 1, 0]
3、倒着打印列表
使用reverse()方法
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> print(nums)
[1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> nums.reverse()
>>> print(nums)
[0, 767, 23, 65, 23, 23, 5, 4, 2, 3, 1]
4、确定列表的长度
使用len()函数
>>> nums = [1, 3, 2, 4, 5, 23, 23, 65, 23, 767, 0]
>>> len(nums)
11