1 列表
1.1 列表的介绍
- 数据结构:计算机中数据的存储方式
- 序列:Python中最基本的数据结构。序列的每个元素都分配了一个数字 ,即它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
- 序列进行的操作:索引,切片,加,乘,检查成员。
- Python有6个序列的内置类型(即6个标准数据类型),其中最常见的是列表和元组。
- 列表:也是一个对象,可以用方括号[]进行创建,各个元素之间使用逗号分开,列表的包容性很强,可以保存任意的对象。使用list()函数可以将其他数据类型转换为列表类型。
# 创建一个列表
a=[1,'haha',True,None]
print(type(a),a)
b='hello'
c=list(b)
print(type(c),c)
执行结果为:
<class 'list'> [1, 'haha', True, None]
<class 'list'> ['h', 'e', 'l', 'l', 'o']
- 列表的作用:保持多个有序的数据(除非手动更改,否则顺序是不会改变的)
1.2 列表的访问
- 我们可以通过索引(index)来获取列表中的元素。
注意:
(1)索引从0开始,最大索引值不能超过列表本身的长度。
(2)列表从右往左访问的索引值从-1开始,倒数第一个元素的索引值为-1,倒数第二个元素的索引值为-2,以此类推,即索引值为负数表示反向访问。
# 访问列表
list_one=[1,'hah',True,None]
print(list_one[1]) # 输出列表的第二个元素'hah'
print(list_one[4]) # IndexError: list index out of range
print(list_one[-3]) # 输出列表的第二个元素'hah'
- len()函数可以获得列表的长度或者元素的个数。
a=[1,'haha',True,None]
print(len(a)) # 输出结果为4
可以看到,列表的长度其实就是列表最大的索引值+1。
- 切片:指从现有列表中获取一个子列表。通过切片可以获取指定的元素,语法为
list[开始位置:结束位置:步长]
注意:
(1)切片返回的元素中不包含结束位置的元素(左闭右开)
(2)开始位置和结束位置可以省略,省略开始位置表示从第一个元素开始切片,省略结束位置表示开始位置切片至列表的最后一个元素。
(3)步长默认值为1,可以省略。
(4)步长如果为负数,表示反向切片
# 列表切片
list_two=['c','c++','java','python','R','SAS']
print(list_two[2:4]) # ['java', 'python']
print(list_two[2:]) # ['java', 'python', 'R', 'SAS']
print(list_two[:4]) # ['c', 'c++', 'java', 'python']
print(list_two[1:4:2]) # ['c++', 'python']
print(list_two[-1:-4:-1]) # ['SAS', 'R', 'python']
print(list_two[::2]) # ['c', 'java', 'R']
print(list_two[::-2]) # ['SAS', 'python', 'c++']
- 列表拼接和重复:+号可以拼接两个列表,*号可以重复列表(*号后面的数字是重复的次数)
# 列表拼接和重复
lst=[1,2]+[3,4]
print(lst) # [1, 2, 3, 4]
nlst=[1,3,5]*3
print(nlst) # [1, 3, 5, 1, 3, 5, 1, 3, 5]
- 修改列表:可以使用索引值来指定列表元素的修改
# 修改列表
list_three=['haha', 'hello', 'hey','wow']
list_three[2]='你好'
print(list_three) # ['haha', 'hello', '你好']
# 通过切片进行修改时,必须传递一个序列
list_three[0:2]='abc'
print(list_three) # ['a', 'b', 'c', '你好', 'wow']
# 向索引为0的位置插入元素
list_three[0:0]='d'
print(list_three) # ['d', 'a', 'b', 'c', '你好', 'wow']
# 当设置了步长,序列中元素的个数必须和切片中元素的个数保持一致
list_three[::2]=['e','f','heihei']
print(list_three) # ['e', 'a', 'f', 'c', 'heihei', 'wow']
# 可以通过切片来删除元素
list_three[1:3]=[]
print(list_three) # ['e', 'c', 'heihei', 'wow']
1.3 列表的函数&方法
在Pycharm输入list. 就会显示列表的一些方法,如图所示:
函数 | 描述 |
---|---|
len(list) | 显示列表元素个数或列表长度 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(seq) | 将其他序列类型转换为列表 |
del list[索引值] | 删除指定索引值的元素 |
方法 | 描述 |
---|---|
list.append(obj) | 在列表末尾添加新的对象 |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.index(obj,start,stop) | 从列表中找出某个值第一个匹配项的索引位置,start和stop这两个参数可以省略,不省略的情况下表示在start和stop这段索引区间找出第一个匹配项的索引位置 |
list.insert(index,obj) | 在索引位置的前面将对象插入列表中 |
list.pop(index=-1) | 移除列表中的一个元素(默认是最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort(key=None,reverse=False) | 对原列表进行排序(默认是升序) |
# 列表函数和方法
list_four=[1,3,2,6,4,5]
list_four.append(2)
print(list_four) # [1, 3, 2, 6, 4, 5, 2]
list_test=list_four.copy()
print(list_test) # [1, 3, 2, 6, 4, 5, 2]
list_test.clear()
print(list_test) # []
print(list_four.count(2)) # 2
list_four.extend([3,5,4])
print(list_four) # [1, 3, 2, 6, 4, 5, 2, 3, 5, 4]
print(list_four.index(3)) # 1
print(list_four.index(3,2,8)) # 7
list_four.insert(3,0)
print(list_four) # [1, 3, 2, 0, 6, 4, 5, 2, 3, 5, 4]
print(list_four.pop()) # 4
list_four.remove(0)
list_four.reverse()
list_four.sort(key=None,reverse=False)
print(list_four) # [1, 2, 2, 3, 3, 4, 5, 5, 6]
1.4 for循环和range()函数
- Python的for循环可以遍历任何序列的项目,如一个列表或者一个字符串。
- for循环的一般格式如下:
for <variable> in <sequence>:
<statements>
else:
<statements>
示例1:
list_five=[1,3,'hello',6,'haha',5]
for i in list_five:
print(i)
执行结果:
1
3
hello
6
haha
5
示例2:
str_list = ["Baidu", "Google","alibaba","Taobao"]
for i in str_list:
if i == "alibaba":
print("阿里巴巴!")
# 遇到alibaba就会跳出循环体
break
print("循环输出 " + i)
else:
print("没有循环数据!")
print("完成循环!")
执行结果:
循环输出 Baidu
循环输出 Google
阿里巴巴!
完成循环!
- range()函数:可以生成数列,其语法为range(开始值,结束值,步长)
注意:
(1)range()函数生成的数列不包含结束值,默认步长为1;
(2)不指定开始值表示从0开始;
(3)开始值、结束值、步长均可以是负数。
# 遍历数字序列
# 输出0到4
for i in range(5):
print(i)
# 输出5到8
for i in range(5,9):
print(i)
# 输出5和7
for i in range(5,9,2):
print(i)
# 输出-5和-7
for i in range(-5,-9,-2):
print(i)
- 结合range()和len()函数可以遍历一个序列的索引
a = ['aa', 'bb', 'cc', 'dd', 'ee']
for i in range(len(a)):
print(i, a[i])
执行结果:
0 aa
1 bb
2 cc
3 dd
4 ee
- 使用range()函数来创建一个列表:
lst=list(range(5))
print(lst) # [0, 1, 2, 3, 4]
- break、continue、pass这三个关键字对for循环同样适用,效果和while循环一样。
# 输出2到10的所有质数
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, '等于', x, '*', n//x)
break
else:
# 循环中没有找到元素
print(n, ' 是质数')
执行结果:
2 是质数
3 是质数
4 等于 2 * 2
5 是质数
6 等于 2 * 3
7 是质数
8 等于 2 * 4
9 等于 3 * 3