【Python】数据结构:列表,中括号表示[ ]

python内置了多种类型的数据结构,最常用包括:列表、元组、集合和字典。

1.列表list

有序,可通过索引查找

list1 = [1,3,5,7,100]
list2 = ['hello']*3 #表示为:['hello','hello','hello']
print(len(list1)) #5,list1的长度
print(list1[0]) #1,索引取值
print(list1[4]) #100
print(list1[5]) #IndexError:list index out of range
print(list1[-1]) #100,想象成一个环
print(list1[-3]) #5
list1[2] = 300 #赋值

(2)list的遍历

for index in range(len(list1)): #通过下标遍历
print(list1[index])
for elem in list1: #for循环直接遍历元素
print(elem)
for index,elem in enumerate(list1): #使用enumerate函数可同时获得索引和值
print(index,elem)

(3)list添加删除等操作

list1 = [1,3,5,7,100]
list1.append(200) #添加到末尾
list1.insert(1,400)
print(list1) #[1, 400, 3, 5, 7, 100, 200]
list1.extend([1000,2000]) #合并两个列表
#list1+=[1000,2000]
print(list1) #[1, 400, 3, 5, 7, 100, 200, 1000, 2000]
if 3 in list1: #删除列表中的某个值
list1.remove(3)
if 1234 in list1:
list1.remove(1234)
list1.pop(0) #通过索引来删
list1.pop(len(list1)-1) #删除最后一个
print(list1) #[400, 5, 7, 100, 200, 1000]
list1.clear() #清空列表
print(list1) #[]

(4)列表的切片
通过切片将列表复制或将列表中的一部分取出来创建新的列表

students1 = ['张三','李四','王五','赵六']
students1 += ['钱七','老八','鬼九'] #合并
students2 = students1[1:4] #左闭右开 1~4
print(students2) #['李四', '王五', '赵六']
students3 = students1[:] #通过完整切片来复制列表
print(students3) #['张三', '李四', '王五', '赵六', '钱七', '老八', '鬼九']
students4 = students1[-3:-1]
print(students4) #['钱七', '老八']
students5 = students1[::-1] #反向切片获得倒转列表
print(students5) #['鬼九', '老八', '钱七', '赵六', '王五', '李四', '张三']

(5)列表的排序

list1 = ['orange', 'apple', 'zoo', 'international', 'blueberry']
list2 = sorted(list1) # sorted函数不会修改list1,默认字母表排序
print(list2) # ['apple', 'blueberry', 'international', 'orange', 'zoo']
list3 = sorted(list1, reverse=True)
print(list3) # ['zoo', 'orange', 'international', 'blueberry', 'apple']
list4 = sorted(list1, key=len) # 根据字符串长度排序
print(list4) # ['zoo', 'apple', 'orange', 'blueberry', 'international']
list1.sort(reverse=True) # 直接在列表对象上排序
print(list1) # ['zoo', 'orange', 'international', 'blueberry', 'apple']

2.生成式和生成器

(1)使用生成式语法来创建列表

f = [x for x in range(1,10)]
print(f) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
f = [x+y for x in 'ABCDE' for y in '1234567']
print(f) # ['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'E1', 'E2', 'E3', 'E4', 'E5', 'E6', 'E7']
import sys
f = [x**2 for x in range(1,1000)] #中括号
print(sys.getsizeof(f)) #查看对象占用内存的字节数 9024
print(f) # [1, 4, 9, 16, 25, 36...

(2)创建生成器对象
通过该对象获取到数据,不占用额外的空间存储数据,每次需要数据时通过内部运算得到数据(需要花费额外的时间)。

f = (x**2 for x in range(1,1000)) #普通括号
print(sys.getsizeof(f)) # 120
print(f) # <generator object <genexpr> at 0x000001B3EA017748>
for val in f:
print(val) # 1 4 9 16 25...

(3)使用yield关键字将普通函数改造成生成器函数
已知菲波那切数列
image

def fib(n):
a,b = 0,1
for _ in range(n):
a,b = b,a+b
yield a
def main()
for val in fib(20):
print(val)
if __name__=='__main__':
main()

参考链接
1.彻底理解Python中的yield

posted @   植树chen  阅读(153)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示