一、认识列表
1. 定义:
- 是python中的容器类的数据类型,可以用来存储多个数据。可变的,有序的。
可变(列表中的元素的值和位置以及列表的长度可变) --->决定列表可以进行增删改
有序 --->决定可以通过下标来获取元素
2.字面量:
- [元素1, 元素2, 元素3....]
[] ---> 空列表 - 附:列表中的元素可以是任何类型的数据,包括整数、浮点数、布尔、字符串、列表、字典、元祖、集合、函数、类的对象等
- 例子:
list1 = [23, 1.87, 'abc'] # 声明一个变量list1,给它赋了一个列表。列表有三个元素
# 声明一个列表,列表中有三个元素,分别是[1,2], 'abc', False
list2 = [
[1,2],
'abc',
False
]
list3 = [
{'a': 10},
{'abc': True}
]
print(type(list3))
# 注意:变量也可以作为列表的元素
name = '路飞'
names = ['小明', '小花', '小红', name]
print(names)
二、列表元素的增删改查
1.查
- a.获取单个元素
列表[下标]
说明:列表一旦确定,列表中的每个元素的下标就确定了。下标的范围0~列表长度-1 / -1~列表长度
- b.获取部分元素(切片) ---> 结果是个列表
列表[起始下标:结束下标] --> 从起始下标开始,获取到结束下标前为止
列表[起始下标:结束下标:步长]
- 例子:
names = ['路飞', '娜美', '佐罗', '山治', '罗宾']
print(names[0], names[-4])
#路飞 娜美
# print(names[20]) # 下标不能越界
print(names[1:3])
print(names[:4:2])
print(names[::-1])
print(names[:])
#['娜美', '佐罗']
#['路飞', '佐罗']
#['罗宾', '山治', '佐罗', '娜美', '路飞']
[#'路飞', '娜美', '佐罗', '山治', '罗宾']
2.增
a.
列表.append(元素) ---> 在列表的最后添加一个元素b.
列表.insert(下标,元素) ---> 在指定的下标前去添加指定的元素例子:
films = ['绿巨人', '钢铁侠', '蜘蛛侠', '神奇女校']
films.append('美国队长')
print(films)
#['绿巨人', '钢铁侠', '蜘蛛侠', '神奇女校', '美国队长']
films.append('恐怖游轮')
print(films)
#['绿巨人', '钢铁侠', '蜘蛛侠', '神奇女校', '美国队长', '恐怖游轮']
films.insert(1, '双瞳')
print(films)
#['绿巨人', '双瞳', '钢铁侠', '蜘蛛侠', '神奇女校', '美国队长', '恐怖游轮']
films.insert(0, '雷神')
print(films)
#['雷神', '绿巨人', '双瞳', '钢铁侠', '蜘蛛侠', '神奇女校', '美国队长', '恐怖游轮']
3.删
a.
del 列表[下标] ---> 删除列表中指定位置的元素
注意:del语句是python中用来删除数据的语法,可以删除任何数据b.
列表.remove(元素) ---> 删除列表中指定的元素
注意:如果这个元素在列表中有多个,只删最前面的那一个c.
列表.pop() ---> 将列表中的最后一个元素取出
列表.pop(下标) ---> 将列表中指定下标对应的元素取出例子:
heros = ['盖伦', '儿童劫','维克拖', '提姆', '托儿索', '儿童劫']
del heros[-2]
print(heros)
#['盖伦', '儿童劫', '维克拖', '提姆', '儿童劫']
heros.remove('儿童劫')
print(heros)
#['盖伦', '维克拖', '提姆', '儿童劫']
beauty = ['余婷', '范冰冰', '周迅', '杨颖', '杨幂', '赵丽颖']
person = beauty.pop()
print(beauty, person)
#['余婷', '范冰冰', '周迅', '杨颖', '杨幂'] 赵丽颖
person = beauty.pop(1)
print(beauty, person)
#['余婷', '周迅', '杨颖', '杨幂'] 范冰冰
4.改
列表[下标] = 新值 ---> 修改指定下标对应的元素
例子:
teachers = ['余婷', '骆昊', '王海飞', '肖世荣']
teachers[0] = 'YuTing'
print(teachers)
#['YuTing', '骆昊', '王海飞', '肖世荣']
三、列表运算
1.+和×
- 列表1 + 列表2 ---> 将列表1和列表2中的元素合并,产生一个新的列表
列表*n ---> 将列表中的元素重复n次,产生一个新的列表
例子:
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
print(list1 + list2)
#[1, 2, 3, 'a', 'b', 'c']
print(list1)
#[1, 2, 3]
print(list1*3)
#[1, 2, 3, 1, 2, 3, 1, 2, 3]
2.比较运算
列表1 == 列表2 ---> 判断两个列表中的元素是否相等(判断的是值是否相等)
列表1 is 列表2 ---> 判断两个列表中的元素是否相等(判断的是地址是否相等)
附:两个列表比较大小,比较的是每个元素的大小
例子:
list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1
print(id(list1), id(list2), id(list3))
# 2673719124168 2673719098824 2673719124168
print(list1 == list2) # True
print(list1 is list2) # False
print(list1 is list3) # True
3.赋值运算
列表1 = 列表2 ---> 将list1中的数据的id赋给list2
注意:会因为修改其他一个列表的元素而影响另外一个列表,如果不想相互影响,赋值的时候赋切片或者拷贝
例子:
list1 = ['a', 'aa', 'aaa']
list2 = list1 # 将list1中的数据的id赋给list2
list2.append('aaaa')
print(list2)
#['a', 'aa', 'aaa', 'aaaa']
print(list1)
#['a', 'aa', 'aaa', 'aaaa']
list3 = list1[:] # 将list1中的数据拷贝一份,存到新的内存区域中,然后将新的地址给list3
list3.pop(0)
print(list3)
['aa', 'aaa', 'aaaa']
print(list1)
['a', 'aa', 'aaa', 'aaaa']
四、列表的函数与方法
1.函数
函数 | 说明 |
---|---|
len(list) | 列表元素个数 |
max(list) | 返回列表元素最大值 |
min(list) | 返回列表元素最小值 |
list(字符,range, 列表,字典,元祖,集合,迭代器) | 将序列转换为列表 |
2.方法
方法 | 说明 |
---|---|
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 返在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index,obj) | 将对象插入列表 |
list.pop([index=-1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort(cmp=None, key=None, reverse=False) | 对原列表进行排序 |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
作业
- 已知一个列表,求列表中心元素。
scores = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
index1 = int(len(scores))
if index1 % 2:
print(scores[index1//2])
else:
print(scores[index1//2-1], scores[index1//2])
题一
- 已知⼀个列表,求所有元素和。
scores = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
sums = 0
for score in range(len(scores)):
sums += scores[score]
print(sums)
题二
- 已知一个列表,输出所有奇数下标元素。
scores = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
for score in range(1,len(scores)+1,2):
print(scores[score])
题三
4.已知⼀一个列列表,输出所有元素中,值为奇数的。
scores = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
for score in range(len(scores)):
if scores[score] % 2:
print(scores[score])
题四
- 已知⼀个列表,将所有元素乘⼆。
scores = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
for score in range(len(scores)):
scores[score] *= 2
print(scores)
题五
- 已知⼀个列表,将所有元素加到第⼀个元素中
scores = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
for score in range(len(scores)):
scores[0] += scores[score]
print(scores)
题六
- 已知⼀个列表A,将奇数位置元素存到B列表中,偶数元素存到C列表中。
A = [1, 2, 3, 4, 5, 6, 7, 8, 9]
B = []
C = []
for i in range(len(A)):
if i % 2:
B.append(A[i])
else:
C.append(A[i])
print(B,C)
题七
- 把A列表的前5个元素复制到B列表中
A = [1, 2, 3, 4, 5, 6, 7, 8, 9]
B = []
for i in range(len(A)):
if i >4:
break
else:
B.append(A[i])
print(B)
题八
- 有⼀个长度是10的列表,列表内有10个不重复的数字,要求按从大到小排序。
scores = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
scores.sort(reverse=-1)
print(scores)
题九
- 有⼀个长度是10的列表,要求删除某一个位置的元素
scores = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
n = input('输入一个小于10的数字:')
n = int(n)
print(scores)
del scores[n]
print(scores)
题十
- 有一个长度是10的列表,按递增排列,用户输入一个数,插入适当位置。
scores = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
index1 = 0
n = input('输入一个数字:')
n = int(n)
for score in scores:
if score >= n:
scores.insert(index1,n)
break
index1 += 1
print(scores)
题十一
- 有一个长度是10的列表,数组内有10个人名,要求去掉重复的
lists = ['嘿嘿', '哈哈', '吼吼', '哦哦', '嗯嗯', '嘿嘿', '咦咦', '呵呵', '哦哦', '嗷嗷']
lists1 = []
for i in lists:
if i not in lists1:
lists1.append(i)
print(lists1)
题十二
- 把A列表的第三到第六位之间的元素删除。
# A=[1, 2, 3, 4, 5, 6, 7, 8, 9]
# del A[3:6]
# print(A)
题十三
- 已知A列表,B列表,定义一个列表C,要求C包含A,B数组中的数据(无重复值)
A=[1, 2, 3, 4, 5, 6, 7, 8, 9]
B=[1, 3, 5, 7, 9, 11, 13, 15]
C=[]
for i in A+B:
if i not in C:
C.append(i)
print(C)
题十四