Python第二课
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python第二课相关的知识,希望对你有一定的参考价值。
一、分类
数值型
int: 长整形,无上限,受限于内存大小 float: 整数加小数,支持十进制和科学计数,只有双精度型(不能“全部完全”准确的表示一个小数,3.333333.....,π,近似表达) complex: 实数和虚数组成,实数虚数都是浮点数,3+4.2J bool: int的子类,仅有两个示例:True、False,对应1,0,可以和整数直接运算
类型转换
int() float() complex() bool(),非0为True
二、数字的处理函数
round(),四舍六入五取偶 floor()地板,向下取整 ceil()天花板,向上取整 int()取整 举例
import math print(math.floor(2.5))
min()取最小 max()取最大 pow(x,y)等于x**y pow(8,1/3),开三次方
sqrt开方
进制函数,返回字符串
bin()二进制 oct()八进制 hex()十六进制
math.pi π math.e 自然常数
三、类型判断
type(obj),返回类型,而不是自负床
isinstance(obj,class_or_tuple),返回布尔值
a=5,b=“hello” isinstance(a,int)---->True isinstance(b,int)---->False isinstance(a,(int,str))---->True
四、列表list
一个队列,一个排列整齐的队列 列表内的个体称为元素,列表由若干元素组成 元素可以是任意对象----int、str、对象、列表
五、列表list定义、初始化
lst=list() lst1=[ ],空列表 lst=list(range(5)) 列表不能一开始定义大小,列表可变
六、列表索引访问
索引、也叫下标 正索引:0开始,左到右,下界到上界 负索引:-1开始,右到左,上界到下界 列表通过索引访问:list[0]、list[-1]
七、列表查询
index---->list.index(value,[stop,[stop]])
lst=[1,2,3,2,4,2,2,2,6] lst.index(2)---->1、lst.index(2,2,7)---->3
lst.count(2)---->5
时间复杂度
O(1)或2,3,4都是常数,固定执行几次,效率最高 index和count都是O(n),要遍历里面的数据 规模越大,效率越差
len(),这是O(1),只会计算长度
八、元素修改
lst[index]=value lst=[1,2,3,4,5] lst[4]=6---->lst[1,2,3,4,6]
九、列表增加、插入元素
append
不执行,返回空,会增加 就地修改 O(1)操作---知道单位长度,直接到达尾部
insert
指定索引index处插入元素----lst.insert(4,8) 就地修改 O(n)操作----挪动,整体后挪 插入时,索引超越上界,尾部追加(这是O(1)),超越下界,头部追加,这是O(n)
lst=[ ],lst*5---->lst[ ],空永远是空,lst=[1]的话,结果---lst=[1,1,1,1,1]
lst=[ ],lst1=[ ],----lst+lst1返回新的结果,两个列表不变
extend在后面追加
就地修改 lst.extend(lst1)
remove删除
remove(value)----lst.remove(2),移除列表值2 就地修改,效率O(n)
pop弹出
lst.pop()弹出最后/(2),弹出2 index,区别于remove的移除value 尾部弹出O(1),中间O(n)
clear()
清空,考虑垃圾回收问题,jc
十、列表其他操作
reverse()反转,就地修改
sort(key=None,reverse=False)---sort()默认排序
对元素进行排序,就地修改,默认升序 reverse为False,不反转,True反转,降序 key和reverse,可以单独使用,但必须带上,key是函数,指定用什么排序,key=int
in/not in
[3,4] in [1,2,[3,4]] for i in [1,1,1,2,3] 返回bool值,可以用if语句
十一、列表复制
lst0=list(range(4))---->hash(id(lst0)) lst1=list(range(4))---->hash(id(lst1)) lst0==lst1---->True,比较数值 lst0 is lst1---->False,比较地址
复制
lst2=lst0--->这个连id地址都会产生变化 lst2[2]=10 lst0的index2也会变成10
copy()
lst0=list(range(4)) lst1=lst0.copy()---->只拷贝内容,不会拷贝其他,新的内存空间,对lst1进行修改,不会更改lst0 lst[index][index],列表里面的列表查value方法 lst=[1,[1,2,3],10] lst1=lst.copy() lst1[1][1]=20,将[1,2,3]中的2变成20 因为[1,2,3]是个列表,所以拷贝时,直接拷贝了地址,影子拷贝(浅拷贝),所以修改lst1的[1,2,3]时,lst中的[1,2,3]也会改变
深拷贝
copy.deepcopy() import copy lst0=[1,2,[1,2,3],4] lst5=copy.deepcopy(lst0) lst5[1][1]=20 lst5==lst0---->False深拷贝,将内容完全深入拷贝,不会浅拷贝地址
随机数
random模块 import random randint(a,b)返回[a,b]之间的整数 random.choice([1,2,3,4,5]) random.randrange(1,7,2)---->从1开始,到6结束,2为步长,前闭后开,1,3,5 random.randrange(1)---->一直出现0 random.shuffle(list)打乱、洗牌
十二:元组tuple
小括号表示,不可变 t=(0,1,2)*5 单个表示(1,)逗号必须
十三:元组访问
基本类同列表 不可变,所以没有append这些操作
十四:命名元组
namedtuple student=namedtuple(“s”,“name age”) tom=student(“tom”,22) tom.name
十五:字符串
join,将内部元素用符号隔开 “magedu”.join(“,”) "magedu".join([1,12,222,3]) 字符串相加,获得新的字符串
十六:字符串分割
split(从左至右,默认以空白字符串为分隔符,可以指定,maxsplit最大分割数) “I am a student”.split(“s”,maxsplit=2) rsplit(从右向左) splitlines(【keepends】)按行切割,中括号内可以不加,加则写True,表示保留行分隔符 ‘ab c\n\nde fg\rkl\r\n‘.splitlines(True) partition(head,sep,tail)分成两部分,sep为分割符,必须指定,若分隔符不在字符串内,则分为head,空,空 rpartition从右开始分割,若分隔符不存在,则为空空tail
十七:字符串大小写
upper大写 lower小写 swapcase大小写互换
十八:字符串排版
title(),标题的每个单词都大写 capitalize()首单词大写
十九:字符串修改:
replace(old,new,【count】) “www.magedu.com”.replace(w,p,2)
二十:字符串修改:
strip(【chars】)去掉字符串中的字符,从两端操作,里面的不操作 strip()去除两端空白字符 “\n I am a student \n”.strip( )去掉两端空白字符 “\n I am a student \n”.strip( “ Iatne”)去掉空格和latne字符,结果为"m a stud" lstrip\rstrip(从左边或从右边)
二十一:字符串查找
find(sub【,start】【,end】)---->int,返回索引 rfind从右边找 s = "I am very very very sorry" s.find(”very“,5,8)结果为-1,表示没有,因为前”[“后”)“所以要写9 index(sub[,start][,end])---->int s.index(”very“,5)返回索引 s.rindex(”very“,10)右边找
二十二:字符串查找
count(sub,【,start】【,send】)
二十三:字符串判断:s
endswith(suffix【,start】【,end】)---->bool startswith s = "I am very very very sorry" s.startswith(‘very‘) s.endswith(‘sorry‘, 5)
二十四:字符串判断
isdigit是否是数字组成 isalnum是否是字母和数字 isalpha是否是字母组成 isupper/islower
二十五:字符串格式化
”{}{}“.format("x","y") 位置参数"{}:{}".format(‘192.168.1.100‘,888 关键字或命名参数"{server} {1}:{0}".format(8888, ‘192.168.1.100‘, server=‘Web Server Info : ‘)) 位置参数按照序号匹配,关键字按照名词匹配 访问元素"{0[0]}.{0[1]}".format((‘magedu‘,‘com‘)) 对象属性访问 from collections import namedtupl Point = namedtuple(‘Point‘,‘x y‘) p = Point(4,5) "{{{0.x},{0.y}}}".format(p)----》{{{}}},两个大括号,表示打印里面的花括号 对齐:"{0}*{1}={2:<2}".format(i,j,i*j)
for i in range(1,10):
for j in range(1,i+1):
x="{0}*{1}={2:<2}".format(j,i,i*j)
print(x,end="")
print(){:^30}‘.format(‘centered‘)‘ {:*^30}‘.format(‘centered
二十六:切片
“www.magedu.com”[4:10],取magedu,10不取,可加步长,跳跃取值
作业:
一、求质数:
方法一:
primelst=[] for i in range(2,10000): for j in primelst: if i%j==0: break else: primelst.append(i) print(primelst)
方法二:
import datetime start=datetime.datetime.now() import math primelst=[] flag=False for i in range(2,100000): for j in primelst: if i%j==0: flag=True break if j>=math.ceil(i**0.5): flag=False break if not flag: primelst.append(i) print(primelst) delta = (datetime.datetime.now()-start).total_seconds() print(delta)
二、杨辉三角
方法一:
lst=[[1]] for i in range(1,6): cur=[1] pre=lst[i-1] for j in range(0,i-1): cur.append(pre[j]+pre[j+1]) cur.append(1) lst.append(cur) print(lst)
方法二:
triangele=[] n =6 for i in range(n): pre=[1] for j in range(i): if j==i-1: pre.append(1) else: pre.append(0) triangele.append(pre) for k in range(1,i//2+1): cur=triangele[i-1][k-1]+triangele[i-1][k] pre[k]=cur if k!=i-k: pre[-k-1]=cur print(triangele)
三、冒泡法:
题一:输入三个数,升序排列
numlist=[] for i in range(3): numlist.append(int(input("{}:".format(i)))) for i in range(3): for j in range(3-i-1): if numlist[j]>numlist[j+1]: tmp=numlist[j] numlist[j]=numlist[j+1] numlist[j+1]=tmp print(numlist)
题二:长排序
numlist=[[1,9,8,5,6,7,4,3,2],[1,2,3,4,5,6,7,8,9],[1,9,2,3,4,5,6,7,8]] num=numlist[0] length=len(num) for i in range(length): for j in range(length-i-1): if num[j]>num[j+1]: tmp=num[j] num[j]=num[j+1] num[j+1]=tmp print(num)
题二高效法
numlist=[[1,9,8,5,6,7,4,3,2],[1,2,3,4,5,6,7,8,9],[1,9,2,3,4,5,6,7,8]] num=numlist[0] length=len(num) for i in range(length): flag=False for j in range(length-i-1): if num[j]>num[j+1]: tmp=num[j] num[j]=num[j+1] num[j+1]=tmp flag=True if not flag: break print(num)
四:用户输入一个数字:1、判断是几位数 2、打印每一位数字及重复次数 3、个十百千万的打印出来
while True: num=input("print input a num:").strip("0") if num.isdigit(): break else: print("Wrong number") print("The length of {} is {}".format(num,len(num))) for i in range(len(num),0,-1): print(num[i-1],end=" ") print() countlist=[0]*10 for x in num: i=int(x) countlist[i]=num.count(x) print("The count of {} is {}.".format(x,countlist[i]))
五、输入五位数,打印每个数的位数,将这些数字排序打印,升序
numlist=[] while len(numlist)<5: num=input("please input a number:").strip().lstrip("0") if not num.isdigit(): continue numlist.append(int(num)) print(numlist) for x in numlist: print("The {} of length is {}".format(x,len(str(x)))) numlist.sort() print(numlist)
六、随机产生十个数字,要求,每个数字取值范围1-20,统计重复的数字有几个,分别是什么,不重复的,分别是什么,有几个
反求索引
import random numlist=[] countlist=[0]*21 while len(numlist)<10: numlist.append(random.randint(1,20)) print(numlist) for i in numlist: if countlist[i]==0: countlist[i]=numlist.count(i) # print(countlist) for j in range(21): if countlist[j]!=0: print("The count of {} is {}.".format(j,countlist[j]))
使用新建列表方法:
import random num =[] for i in range(10): num.append(random.randint(1,20)) print(num) counter = [0]*21 list1 = [] list2 = [] number = 0 number1 = 0 for x in num: if counter[x] == 0: counter[x] = num.count(x) if counter[x] > 1: number += 1 list1.append(x) else: number1 += 1 list2.append(x) print(‘{} {}‘.format(number,list1)) print(‘{} {}‘.format(number1,list2))
本文出自 “13277682” 博客,谢绝转载!
以上是关于Python第二课的主要内容,如果未能解决你的问题,请参考以下文章
Python 基础 2022 最新第二课 变量 & 数据类型
Python 基础 2022 最新第二课 变量 & 数据类型