第七天总结
线性表:
数组(Array):连续,大小固定的内存结构
栈(Stack):先进后出,后进先出
队列(Queue):先进先出
链表(List):
python内置的常见容器
python没有实现数组
列表(list):底层基于双向链表结构实现的
集合(set):
元组(tuple):
字典(dict):k-v键值对实现
列表(list):
列表的定义:
有两种方式:通过弱数据类型语言的特点完成
ls = [12,34,45,88,99]
第二种,就是调用一个全局函数
list()
list([元素1, 元素2, ……, 元素n])
如何访问列表中的元素(element):
列表[下标] # 下标是从0开发
如何得到列表共有多少个元素?
len(列表) # 得到列表的元素个数
如何遍历列表
index = 0
while index < len(ls):
print(ls[index])
index += 1
for循环python,for循环就是用来迭代可迭代对象,而list就是一个可迭代对象
for i in ls:
print(i)
列表中的常见方法(methods):
[‘append’, ‘clear’, ‘copy’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’,
‘remove’, ‘reverse’, ‘sort’]
|-- append(新元素) # 在列表尾部追加一个最后元素
|-- insert(index, 新元素) # 在需要的位置添加新元素
|-- extend(列表) # 合并多个列表
|-- remove(元素) # 删除元素
|-- pop() # 删除最后一个元素
|-- clear() # 清除所有元素
|-- index(元素) # 查询元素出现的第一个索引,注意,如果没有改元素,则抛出错误
|-- count(元素) # 统计元素出现的次数
|-- reverse() # 翻转列表顺序
|-- sort() # 注意类型统一
|-- copy() # 对象浅拷贝(堆内存)
第七天的作业
作业1:有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币 [10, 8, 5, 3, 27, 99]
方法一:
ls = [10, 8, 5, 3, 27, 99]
for i in ls:
index = (i + 1) // 2
print(index)
方法二:
#ls = [10, 8, 5, 3, 27, 99]
i = 0
while i < len(ls):
index = (ls[i]+1) // 2
print(index)
i += 1
作业2:如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数".
ls = []
flag = True
for num in range(2,100):
for i in range(2,num):
if num % i == 0:
flag = False
break
else:
flag = True
if flag:
ls.append(num)
print(‘1~100以内的素数有:’)
print(ls)
j = 1
while j < len(ls):
if ls[j] - ls[j - 1] == 2:
print("{}和{}是孪生数".format(ls[j], ls[j - 1]))
j += 1
作业3:给定一个列表,求最大值(不能使用系统api),求最小值,求平均值、求和
ls = [8,2,6,4,7,5,3,1,9]
ls.sort()
print(ls)
n = 0
print(‘最小值为:’,ls[0])
print(‘最大值为:’,ls[len(ls)-1])
for i in ls:
n += i
print(‘平均数为:’,n/len(ls))
print(‘和为:’,n)
作业4:将list中的重复数据去重,至少使用两种方案
#方法一:
ls = [1,2,3,4,5,6,7,7,6,5,4,3,2,1]
print(ls)
print(list(set(ls)))
#方法二:
ls1 = [1,2,3,4,5,6,7,7,6,5,4,3,2,1]
ls2 = [1,2,3,4,5,6,7,7,6,5,4,3,2,1]
print(ls1)
for i in ls1:
if i in ls2:
ls1.remove(i)
print(ls1)
#方法三:
ls1 = [1,2,3,4,5,6,7,7,6,5,4,3,2,1]
ls2 = []
for i in ls1:
if i not in ls2:
ls2.append(i)
print(ls1)
print(ls2)
作业5:两个列表进行合并操作
#方法一:
ls1 = [1,2,3]
ls2 = [4,5,6]
ls3 = [7,8,9]
ls4 = ls1 + ls2 + ls3
print(ls4)
#方法二:
ls1 = [1,2,3]
ls2 = [4,5,6]
ls3 = [7,8,9]
ls1.extend(ls2 + ls3)
print(ls1)
作业6: 使用列表判断一个列表是否在另外一个列表中
作业7:列表的反转 列表的排序
ls = [1,2,3,6,7,9,8,4,5]
print(ls)
ls.reverse()
print(‘列表的反转:’,ls)
ls.sort()
print(‘列表的排序:’,ls)
作业8:如何将0-10随机存入列表中
import random as a
ls = []
for i in range(0,10):
ls.append(a.randint(0,10))
print(ls)
第八天的总结
今日目标:
set 集合
tuple 元组
dict 字典
set:
一般集合都是使用hash表实现,
无序且不重复!!!!
定义集合
s = {值1, 值2,…… 值n} # set定义是,不能为空,为空表示一个空字典
ss = set()
sss = set({1,2,3,4,})
ssss = set([1,2,3,4,45,5]) # 使用set函数完成list转换为set
同样的道理
list({1,3,2,43,44,4,5}) # 将set转换为list
set的常见方法:
|-- add(新元素) # 添加新的元素
|-- clear() # 清空集合
|-- copy() # 浅拷贝set
|-- difference() # 求两个集合的差集
|-- union # 求两个集合的并集
|-- intersection # 求两个集合的交集
|-- remove() # 移除元素,如果该元素不存在,则抛出错误
|-- pop() # 随机移除一个元素
|-- discard() # 移除元素,如果该元素不存在,则什么都不做
元组(tuple)
固定的值,不可变数据类型,类似于java、C这些中枚举类型
通过下标访问元素,元素不可变
只有两个方法
|-- index
|-- count
可变数据类型和不可变数据:
基本数据类型都是不可变的,元组也是不可变的
注意1:如果元组的元素是一个可变对象,则可以修改该元素!!!
注意2:请注意(10)和(10, )不同之处
字典(dict):
注意,python中的字段也是一个{}形式,只是里面的元素,不是一个个的值
而是一对键值对
d = {"name": "张三", "age": 34, "nickname": "法外狂徒"}
访问字典中的元素
通过key来访问
d[“name”]
d.get(“age”)
遍历字典:
for i in d:
print(i, d[i])
for i in d.keys():
print(i, d.get(i))
for i in d.items():
print(i[0], i[1])
for k, v in d.items():
print(k, v)
for (k, v) in d.items():
print(k, v)
常见方法:
[clear', 'copy', 'fromkeys', 'get', 'items', 'keys',
'pop', 'popitem', 'setdefault', 'update', 'values']
第八天的作业
作业1:完成一个登录注册案例(要求使用容器保存数据)
作业2:给定一个10个元素的列表,请完成排序(注意,不要使用系统api)
作业3:求 a+aa+aaa+…+aaaaaaaaa=?其中a为1至9之中的一个数,项数也要可以指定。
作业4:合并两个有序数组,合并后还是有序列表
作业5:给定一个非负整数数组A,将该数组中的所有偶数都放在奇数元素之前
作业6:将10进制数据转换为二进制,并且统计其中的0和1的数量
作业7:给定一个数组,已知数组中的元素都是成对出现,
现在数组中只有一个元素没有成对,请找出这个元素。
[1,3,1,2,2,8,8]