这是本人的第一个python学习的博客,由于python之前的基础语法比较简单,本人就选择从python的数据结构开始。一下为学习笔记:
print("-----------python的数据结构---------------")
# 列表list
# 定义
s = [1, 2, 3, 4, 5]
# 获取元素的方式 s[index]
print(s[0])
print(s[-1]) # 取最后一个元素
print(s[-2]) # 取倒数第二个元素
print(s[1:3]) # 取index为1~3的元素,不包括3
print(s[1:]) # 取从1开始到最后的所有元素
print(s[:-2]) # 取从0开始到倒数第二个元素的位置,不包括倒数第二个元素
# 常用函数
'''
s.append(x) 将追加到列表尾部
s.extend(L) 将列表L中的所有元素追加到s尾部形成新的列表
s.insert(i,x) 在列表中index=i的位置插入x元素
s.reverse(x) 删除列表中第一个为x的元素,若不存在,引发一个异常
s.pop(i) 删除index为i的元素,并将删除的元素显示。若不指定i,则弹出最后一个元素
s.clear() 清空列表
s.index(x) 返回第一个x元素的位置,若不存在则报错
s.count(x) 统计列表中x元素的个数
s.reverse() 将列表反向排序
s.sort() 将列表从小到大排序。若需要从大到小排序,则用s.sort(reverse=True)
s.copy() 返回列表的副本
'''
# 元组tuple
# 定义
t = (1, 2, 3)
'''
元组一旦确定就可更改
在python中,如果多个变量用逗号隔开,则默认将多个变量按照tuple的形式组织起来
元组与列表的取值相同
常用函数:
t.count(x) 计算x在元组中出现的次数
t.index(x) 计算第一个x元素的位置
'''
print(t.count(2))
print(t.index(3))
# 集合 set
# 定义
l = {1, 2, 3, 4, 1, 2, 3}
'''
set不能保存重复元素,具有过滤重复数据的功能
set中元素的位置是无序的,因此不能用set[i]方式获取元素
对于数组或者元组来说,可以用set函数取出重复元素
'''
L = [1, 2, 2, 3, 3, 4, 4, 4, 5]
T = 1, 2, 3, 4, 4, 4, 5, 5, 5, 6
SL = set(L)
print(SL)
ST = set(T)
print(ST)
# print(ST+SL) 错
# print(SL * 3) 错
# 集合的操作
'''
x in S 如果S中包含x,返回True,否则False
x not in S
S + T 连接S与T,返回连接后的新集合 set与dict不能连接
S * n 或者n * S 将S延长自身n次 set与dict不能用*连接
len(S) 返回S的长度
'''
# 字典 dict 字典又称键值对
# 定义:
dic = {1: 10, 2: 20, "a": 30, 5: "hello"}
# 取值方式
print(dic[1])
print(dic.get(5))
print(dic.get('a'))
# print(dic * 3) 错
d = dic.copy()
# print(d + dic) 错
'''
常用函数:
dic.items()
dic.keys()
dic.values()
dic.pop(x) 弹出key=x的value
dic.copy() 返回字典dic的副本
dic.clear() 清空字典
'''
# list tuple set 三种数据结构,相同操作函数
'''
求长度:
len(L)
求最小值
min(L)
求最大值:
max(L)
求和:
sum(L)
'''
def add1(x):
return x + 1
L1 = [1, 2, 3, 4, 5]
L2 = list(map(add1, L1)) # 将函数应用于L1的某一项,list set tuple都可以
print(L2)
# 迭代 list set tuple 都可以迭代
print("------迭代-------")
for x in L1:
print(x)
T3 = (1, 2, 3, 4, 5)
for i in T3:
print(i)
S3 = {1, 2, 3, 4, 5}
for x in S3:
print(x)
print("-------获取迭代器----------")
i = L1.__iter__()
print(next(i))
print(i.__next__())
t = T3.__iter__()
print(t.__next__())
print(next(t))
s3 = S3.__iter__()
print(s3.__next__())
print(next(s3))
print("-----------字典dict结构,常用操作------------")
D = {1: 2, 3: 4, 'a': '2sf', 'er': 123}
for x in D:
print(x, D[x])
print("----------字典获取迭代器------------")
d = D.__iter__()
print(next(d))
print(D[next(d)])
print(d.__next__())
print("------------约瑟夫问题-------------")
def move(man, sep):
for i in range(sep):
p = man.pop(0)
man.append(p)
def play(man=41, sep=3, reset=2):
# 初始化
man = [i for i in range(1, man + 1)]
print(man)
sep -= 1
while len(man) > reset:
move(man, sep)
man.pop(0) # kill掉
return man
man = play()
print(man)
print("-------------3个函数 map filter reduce-----------------")
# 遍历函数map
'''
map() 对集合遍历,对序列中每个元素进行操作,最终返回新的序列
'''
old_list = [1, 2, 3, 4, 5, 6]
new_list = map(lambda a: a + 10, old_list)
print(list(new_list))
list1 = [11, 22, 33, 44]
list2 = [1, 2, 3, 4]
new_list2 = map(lambda x, y: x + y, list1, list2)
print(list(new_list2))
'''
list1如果与list2元素个数不匹配
list1 = [11, 22, 33, 44]
list2 = [1, 2, 3]
new_list2 = map(lambda x, y: x + y, list1, list2)
结果:[12, 24, 36]
'''
# 筛选函数filter
'''
用于对序列中的元素进行筛选
map()与filter()是python的内置函数
reduce()在python2中是内置函数,在python3中移到了functools模块中,使用时需要导入
'''
new_list3 = filter(lambda x: x > 22, list1)
print(list(new_list3))
# 累计函数reduce
'''
用于对序列内所有元素进行累计操作
'''
from functools import reduce
new_list4 = reduce(lambda x, y: x + y, old_list)
print(new_list4)