【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 @ 2022-12-06 14:32  植树chen  阅读(159)  评论(0)    收藏  举报