Python列表
2019-11-06 本文已影响0人
C_Z_Q_
列表
- 列表是Python中内置有序可变序列,所有元素放在[]中,每个元素使用逗号隔开
1)创建列表
list_1 = ['鲁班', '安其拉', '狄仁杰', ['科比', '詹姆斯']]
2)列表的访问
- 格式:列表名[index]
list_1 = ['鲁班', '安其拉', '狄仁杰', ['科比', '詹姆斯']]
print(list_1[3])
print(list_1[3][0])
3)查看列表里的元素个数
list_1 = ['鲁班', '安其拉', '狄仁杰', ['科比', '詹姆斯']]
print(len(list_1)) #4
4)列表的添加
- append
向列表尾部增加一元素,不改变其内存首地址属于原地操作
list_1 = ['鲁班', '安其拉', '狄仁杰', ['科比', '詹姆斯']]
list_1.append(['1', '2', '3'])
print('添加后列表的值是', list_1)
- insert(index, object)
向列表任意位置插入一个元素,不改变其内存首地址属于原地操作
list_1 = ['鲁班', '安其拉', '狄仁杰', ['科比', '詹姆斯']]
list_1.insert(3, '今天列表天气不错')
print('使用insert 添加后输出的值是', list_1)
- extend()
将另一个迭代对象的所有元素添加至该列表对象尾部,不改变其内存首地址属于原地操作
list_1 = ['鲁班', '安其拉', '狄仁杰', ['科比', '詹姆斯']]
list_1.extend([3, 4, 5, 6, 6])
print('使用extend 添加后输出的值是', list_1)#['鲁班', '安其拉', '狄仁杰', ['科比', '詹姆斯'], 3, 4, 5, 6, 6]
5)列表的 + 和 * 操作
- '+' 是连接两个列表
- '*' 是复制列表
这两个操作并不是真的为列表添加元素,而是创建一个新的列表,不属于原地操作,返回的是新的列表
x = [1, 2, 3]
y = x + [4]
print(y) #[1, 2, 3, 4]
y = x * 2
print(y)
6)列表元素的删除
- pop()
使用列表的pop()方法删除并且返回指定(默认是最后一个)位置元素,如果给出的索引超过了list的范围则会抛出异常
x = [1, 2, 3, 4, 5]
x.pop()
print(x)#[1, 2, 3, 4]
#返回值
value = x.pop(1)
print('有返回值和删除后的', x, value)#[1, 3, 4] 2
- remove
删除首次出现的指定元素,如果列表中不存在要删除的元素,则抛出异常
x = [1, 2, 3, 2, 4, 5]
x.remove(2)
print('remove删除后', x)
- clear 清空列表
x = [1, 2, 3, 2, 4, 5]
x.clear()
print('清空后的x ', x)
- del
删除列表中指定位置的元素,如果列表超出索引范围,则抛出异常
格式:del 列表[index]
x = [1, 2, 3, 2, 4, 5]
del x[0]
print(x)#[2, 3, 2, 4, 5]
7)列表元素的计数
- count
统计指定元素在列表中出现的次数
x = [1, 2, 3, 2, 4, 5, 5, 5]
print(x.count(2))
print(x.count(5))
print(x.count(0))
- index()
获取指定元素首次出现的下标,若列表对象中不存在指定元素,抛异常
x = [1, 2, 3, 2, 4, 5, 5, 5]
print(x.index(2))
print(x.index(1))
print(x.index(2,2,4))#左闭右开
8)in
测试列表是否含有该元素 返回bool类型
x = [1, 2, 3, 2, 4, 5, 5, 5]
print(6 in x) #False
print(1 in x) #True
print(6 not in x) #True
9)列表的排序
- 列表的内置方法:列表名.sort()
1)创建列表
list1 =[]
for x in range(15):
list1.insert(0, x)
print(list1)
2)打乱顺序
from random import shuffle
shuffle(list1)
print('打乱顺序后', list1)
- sort和sorted排序
1)sort排序
list1.sort()
print('排序后', list1)
list1.sort(reverse=True)#指定为逆序排序
print(list1)
reverse() #将列表的所有元素原地逆序排序
list1.reverse()
print('排序后',list1)
2)sorted排序
- sorted()
内置函数sorted 对列表进行排序并且返回新的列表,不对原来列表进行修改
sorted(list1)
print('排序后', list1) # 排序后 [13, 12, 0, 14, 11, 9, 10, 3, 6, 5, 8, 7, 1, 4, 2]
list1 = sorted(list1)
print('排序后', list1) # 排序后 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
- 注:reversed() 返回一个逆序排序后的迭代对象,不对原来列表做修改
list1 = reversed(list1)
print(list1) # <list_reverseiterator object at 0x0043EDB0>
list1 = list(reversed(list1))
print(list1) # [14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
用于序列(列表、元组、字符串)操作的常用内置函数
- len()
返回序列中元素的个数 适用对象:集合、元组、列表、字典
x = [1, 2, 3]
print(len(x))
- max和min
返回列表中最大或最小的元素
同样适用于集合、元组、列表、字典
print(max(x))
print(min(x))
- sum()
对迭代对象进行求和
print(sum(x))
- zip()
返回可迭代的zip对象
常常用于同时迭代两个列表
举例1:
heros = ['鲁班', '后裔']
skills = ['技能1', '技能2']
for hero, skill in zip(heros, skills):
print(hero, '---->', skill)
举例2:
a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8]
zipped = zip(a, b)
print(zipped)
print(list(zipped))
print(list(zip(a, c))) #元素个数与最短的一致
a1, a2 = zip(*zip(a, b)) #zip(*) 可以理解为解压,返回二维矩阵
print(list(a1))
print(list(a2))
- enumerate
枚举 列表元素,返回枚举对象,其中每个元素包含下表和元素本身 的一个元组
for x in enumerate(['a','b','c']):
print(x)
#(0, 'a')
#(1, 'b')
#(2, 'c')
遍历
- 遍历列表的三种方式:
l1 = ['a', 'b', 'c', 'd', 'e', 'f']
for x in l1:
print(x)
for i in range(len(l1)):
print(l1[i])
for index, val in enumerate(l1):
print(val)
列表推导式
也叫生成表达式,列表推导式使用非常简洁的方式来快速生成满足特定需求的列表,代码具有非常强的可读性
语法:[返回表达式 for 临时变量 in 可迭代对象 条件表达式]
注:列表推导式逻辑上是一个for循环,只不过更加简洁
li = [0,1,2,3.....9]
li = [i for i in range(10)]
print(li)
- 列表嵌套
result = []
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
#平铺这个列表
for l in L:
for x in l:
result.append(x)
print(result) #[1, 2, 3, 4, 5, 6, 7, 8, 9]
#使用列表推导式对列表进行平铺
print([x for l in L for x in l])
- 过滤不符合条件的元素
表达式:[返回表达式 for 临时变量 可迭代对象 条件表达式]
from random import randint
# _下划线的目的是增强代码可读性,告诉读代码的人这里不需要临时变量
l2 = [randint(-20, 20) for _ in range(10)]
# print(l2)
#使用列表推导式 筛选出所有大于0的元素
print([i for i in l2 if i > 0])
作业
1.我国现有13亿人口,设每年增长0.8%,编写程序,计算多少年后达到26亿?
sum = 13
i = 1
while True:
sum *= 1.008
if sum >= 26:
break
i += 1
print(i)
2.求1!+2!+3!+4!+5!的和。
sum = 0
for i in range(1, 6):
x = 1
for m in range(1, i+1):
x *= m
sum += x
print(sum)
3.星号三角形:读入一个整数N,N是奇数,输出由星号字符组成的等边三角形,要求:第1行1个星号,第2行3个星号,第3行5个星号,依次类推,最后一行共N的星号。
输入:3
输出:
N = int(input('请输入奇数:'))
for x in range(1, N+1):
if x % 2 != 0:
print(' '*int(((N-x)/2)), end='')
print('*'*x, end='')
print()