python基础阶段(三)—— 常用数据类型操作(详细版)

知识回顾:

为什么区分数据类型?

区分数据类型就是对程序需要处理的数据进行分类,主要是为了区分储存空间(不同类型的数据占存储大小不同)、运行时对数据做不同处理

1.数值型(numbers)

    1.1 表现形式

整数(int)二进制、八进制、十进制、十六进制

浮点数(float)

整数+小数、科学计数法
复数(complex)实部 + 虚部

    1.2 进制概念

                     n进制:逢n进一

进制组成python表达形式

二进制

0、10b + 二进制数
八进制0 ~ 70/0o + 八进制数
十进制0 ~ 9十进制数
十六进制

0 ~ 9、a ~ f

(a ~ f 表示10 ~ 15)

0x + 十六进制数

    1.3 进制转换

     

    1.3.1 其他进制  一一>  十进制

  •  以301为例:二进制 一一> 十进制:1*2^{0}+0*2^{1}+3*2^{2} = 13

                             八进制 一一> 十进制:1*8^{0}+0*8^{1}+3*8^{2} = 193

      1.3.2 十进制 一一> n进制

  • 规律:整数部分:除n取余,逆序排法

                  小数部分:乘n取整,顺序排法

  • 转换函数:
转换函数作用
bin()将对应数值转化成二进制代码 
oct()将对应数值转化成八进制代码 
hex()将对应数值转化成十六进制代码 

   1.3.3 二进制 <一一> 八进制 / 十六进制

  • 八进制:整合三位为一位

例如:二进制 10 110 ,把三位看作一位即后三位110为一组,对应十进制为6;前三位010(前面补一个0)为一组,对应十进制为2,则转化为八进制就是26

  • 同理,十六进制:整合四位为一位
  • 反之,若八/十六进制 一一> 二进制,则只需将每一位数拆分为三 / 四位

1.4 常用操作(各种函数)

 1.4.1 适用于几乎所有的python运算符

             (例如:算数运算符 复合运算符 比较运算符 逻辑运算符) 

 1.4.2 数学函数

              分为内建函数(直接使用)和模块函数(需要先导入对应的包)

常用数学函数作用类型
abs()返回绝对值内建函数
max() / min()最大值/最小值
round(x,n)四舍五入(n表示四舍五入的位数)
pow(x,y)

返回x的y次幂 即x^y ( 或x**y )

ceil()向上取整  3.1取为3

模块函数

先导入math包

floor()向下取整  3.1取为4
sqrt()开平方
log(x, base)以base为基数(底), x的对数

      模块函数的使用方法

     (1)先导入相应的包

# 导入math模块
import math

     (2)使用函数时,应该用 模块名.函数名(参数)

x = math.ceil(3.1)
y = math.floor(3.1)
print(x,y)

1.4.3 随机函数

            在使用之前,需要先导入random模块

常用随机函数作用
random()[0,1)之间的一个随机小数
choice(seq)从一个序列seq中随机挑选一个数值
uniform(x,y)[x,y] 之内的一个随机小数
randint(x,y)[x,y] 之内的一个随机整数
randrange(start, stop=None, step=1) 给定区间内的一随机整数
  [start, stop)         右边取不到

1.4.4 三角函数

            在使用之前,需要先导入math模块

             弧度 = 角度 / 180 * pi        pi 一一> \pi (数学常量)

常用三角函数作用
sin()   cos()   tan()正弦 余弦 正切(注:需要输入弧度
asin()   acos()   atan()反正弦  反余弦  反正切
degrees(x)    弧度 一> 角度
radians(x)    角度 一> 弧度

2.布尔型(bool)

  • 只有 True 和 False 两种结果
  • 是int(整数)类型的子类,二者拥有某种相同的特性
  •   (可以利用issubclass(bool,int)来判定前者是否是后者的子类)

  • 应用场景:            

                1)当作int类型,参与运算,True代表1,False代表0 

                2)比较运算结果

                3)可用于if判定条件和while循环条件(while True: 可以让程序一直循环)     

3.字符串(string)

  • 概念:由单个字符组成的一个集合

    3.1 形式

字符串形式表达方式备注
非原始字符串

单引号 ' '  

双引号 “ ”

三个单引号 ‘‘‘ ’’’

三个双引号 “““ ”””

可以被转义符或内部的引号影响
原始字符串

        r + 非原始字符串

例如:r “abc”

里面是什么内容就输出什么内容(使转义符失效)
转义符(补充)

\ (在行尾时)     续行符
\'     单引号
\"     双引号
\n     换行
\t     横向制表符(TAB)

通过转换某个指定的字符, 使它具备特殊的含义

在使用时应当将转义符放在引号内

例如:print(“12\n”  "34")

print("我是图图\"小淘气\"")  # 在非原始字符串中,使用两层引号会引起错误,所以用转义符
print(r"面对世界\"很好奇\"")
  •  如何使转义符失效?

        1)使用原始字符串   r “ab\c”           2)使用两次转义符 “ab\\c”

 

  • 几点注意事项: 
# 注1 单双引号混用不会报错,可以避开使用转义符
print("我有'问题'数不清")

# 注2 跨行书写可以使用\ 或者()连成一个整体
name1 = "咕叽咕叽"\
         "冒不停"

name2 = ("咕叽咕叽"
         "冒不停")

# 注3 三引号可直接用于跨行书写 或者注释
name3 ="""答对问题亲一下
这就是我的奖励"""
print(name)

 3.2 拼接和切片

     3.2.1字符串拼接

     

拼接方法代码
str1 + str2
name = "Leb" + "ron"

str1 str2

(直接把两个字符串放一起)

name = "ir""ving"
f " xxx{ }xx " 
name1 = "v"

name = f"ir{name1}ing"
str * n  (打印n遍字符串)
print("J.R.\n"*10)

     3.2.2切片

  • 概念:获取字符串的某个片段

   (1)获取某一个字符:name[对应编号]

name = "joker"
print(name[2])

           注:若从头部开始编号,则从0开始,在上例中,j编号0,k编号2

                    若从尾部开始编号,则从-1开始,在上例中,r编号-1,e编号-2

    (2)获取某个片段:name[起始:结束:步长]

name = "batman joker" 
print(name[0:len(name):2])  #从左往右
print(name[len(name):0:-2]) #从右往左
print(name[::-1])     #反转字符串
# 空格也要占一个编号

            注:步长>0,从左往右取;步长<0,从右往左取;起始和结束的顺序也要做对应调整

            特例:反转字符串 name[ : : -1]

3.3 函数操作

  • 该部分不用全部掌握,只需记得大概作用即可,现用现查
  • 在使用时应该用name. 函数(),其中name为要操作的字符串的名字

      3.3.1查找计算类函数

查找计算类函数作用备注
len(name)

计算字符串的字符个数(内建函数)

空格算一个字符,转义符算一个字符
s.find(sub,start=0,end=len(str))查找子串索引位置从左至右索引,找到后直接停止
s.rfind()同上从右向左索引
s.index()及s.rindex()获取子串索引位置与find函数区别:若查找不到,find会报-1,而index会报错
s.count()计算某个子字符串出现的个数

      3.3.2转换操作类函数

转换操作类函数作用备注
replace(old, new, count)在原字符串中,用新字符串替换的旧字符串

count表替换的个数,默认为全部替换

并不会修改原字符串本身(下面也是)

s.capitallize()整个字符串首字母变为大写
s.title()将字符串每个单词的首字母变为大写
s.lower()将字符串每个字符都变为小写
s.upper()将字符串每个字符都变为大写

      3.3.3填充压缩类函数

填充压缩类函数作用备注
s.ljust(指定长度,“填充字符”)根据指定字符(1个), 将原字符串填充够指定长度

l表示原字符靠左,填充的字符靠右,例如

“abc” 一> “abcxxx”

s.rjust()同上

r表示原字符靠右

“abc” 一> “xxxabc”

s.center()同上

原字符串居中

“abc” 一> “xxabcxx”

不均分:右边多一个

s.lstrip()

移除所有原字符串指定字符

(默认为空白字符)

l表示仅仅只移除最左侧的指定字符 

(出现在字符串中间或右侧,则不移除)

s.rstrip()同上

      3.3.4 分割拼接类函数

分割拼接类函数作用备注
s.spilt(“sep”,maxsplit)根据指定的分隔符,将大的字符串分割成几个子字符串

sep:分割符(在有分隔符的地方分割

maxsplit:最大分割次数

s.partition()根据指定的分隔符, 返回三部分内容(分隔符左侧;分隔符; 分隔符右侧)左侧开始查找分隔符
s.rpartition()同上右侧开始查找分隔符
s.splitlines(keepends)按照换行符(\r, \n), 将字符串拆成多个元素, 保存到列表中keepends:是否保留分隔符(True:保留)
s.join()根据指定字符串, 将给定的可迭代对象, 进行拼接, 得到拼接后的字符串可迭代对象:字符串,元组,列表等

      3.3.5 判定类函数

判定类函数作用备注
s.isalpha()判定字符串中是否所有的字符都是字母bool类型
s.isdigit()判定字符串中是否所有的字符都是数字bool类型
s.isalnum()判定字符串中是否所有的字符都是数字或者字母bool类型
s.isspace()

字符串中是否所有的字符都是空白符

包括空格,缩进,换行等不可见转义符

bool类型
s.startwith(“前缀”)判定一个字符串是否以某个前缀开头bool类型
s.endwith(“后缀”)判定一个字符串是否以某个后缀结尾bool类型,常用于判定文件后缀

“A”   in  “B”

判定字符串A是否被B包含bool类型
“A”   not  in  “B”判定字符串A是否不被B包含bool类型

 4.列表(list)

  • 概念:有序的(有顺序)可变的(可填加 删减 替换)元素集合
  • 与字符串的区别:字符串中的元素更像是一个整体,不可替换;而列表中的元素更像是一群独立的个体,可以轻易替换

     

     

      4.1 定义方式

定义方式代码备注
[ 元素1, 元素2,... ]
names = [1,True,3,"abc"]
print(names,type(names))
列表中的元素可以是 数值 字符串 布尔型,也可以是列表

列表生成式

range(start,stop,step)

nums = range(2,10,2)

列表推导式

从一个list推出另一个list

[表达式 for 变量 in 列表 if 条件]

例如:选出list中的奇数的平方,组成新的list

list = [1,2,3,4,5]
newlist = [x ** 2 for x in list if x % 2 != 0]
print(newlist)

      4.2 常用操作(函数)

  • 在使用时应该用list. 函数(),其中list为要操作的列表的名字

            4.2.1添加元素 

函数作用备注
l.append()在列表最后, 追加一个新元素
l.insert (index, object)指定索引前,插入一个元素

index:索引数

object:插入的元素

l.extend(可迭代对象)在原列表中,追加一个新的可迭代对象

可迭代对象:字符串,元组,列表等

若为字符串,则将字符串拆解后挨个加入“abc”一>“a” “b” “c”

乘法运算  *list * 2 相当于把list中的元素打印两遍组成一个新list
加法运算["a"] + ["b", "c"]
                           =  ["a", "b", "c"]

与extend区别:

   1. 会修改原数组

   2. 只能列表类和列表类相加

(补充)元素修改:

names [ 索引数 ] = 修改值

names【5】= 6

将编号为5的元素换成6

 

          4.2.2删除元素  

     注意:在使用 list.remove() + 循环语句 时,一定要避免踩坑。错误示范:

num = [1,2,2,3,5,1,2,2,2]
for x in num:
    if x == 2:
        num.remove(2)
print(num)

       错误原因:每次移除最左侧2之后,会导致右侧元素编号-1,列表的内部结构发生了变化,这 样就会导致漏删

       正确改进如下:可以先将要删除的元素放入另一个list中,再用循环删除

num = [1,2,2,3,5,1,2,2,2]

#将 遍历元素 和 删除元素 分开进行
dellist = []
for x in num:
    if x == 2:   # 本次筛选出的元素放入dellist中,不进行删除。
        dellist.append(x)
for y in dellist:
    num.remove(y)
print(num)

          4.2.3元素查询   

函数作用备注
names[ index ]获取单个元素

index:索引数

从左到右进行查找,找到立刻停止

l.index(object , start , stop)获取元素索引数object:要查找的元素
l.count (object)获取指定元素个数
names[ start : end : step]获取多个元素(切片)
遍历操作
for x in list:根据元素进行遍历在利用元素名称进行遍历时,也可能在循环时遇到问题,此时可设置每次都从下一个元素开始遍历
for index in range( len(list) )根据索引进行遍历
# 目标:输出所有元素及对应的索引数
names = ["a","b","a","d"]

currentindex = 0
for x in names:
    print(x,names.index(x,currentindex))
    currentindex += 1 
#  设置每次都从下一个元素开始遍历

          4.2.4 其他操作(排序 乱序 反转)

函数作用备注
元素 in 列表判定元素是否在列表中
sorted (itrearble, key=None, reverse=False)对所有可迭代对象进行排序,(输出一个列表)

itrearble:可迭代对象

key:排序关键字,本质是函数(根据第几个元素排序)

reverse:T降序  F升序

l.sort (key=None , reverse=F)

与sorted区别:

1. 直接将排序值赋给原列表

2. 仅可对列表进行操作

random.shuffle (list)

随机打乱列表

需要先导入random模块

import random

l.reverse (list)反转列表另:切片反转 names[ : : -1 ]
# key参数讲解
num = [("abc",12),("abd",10)]
def getkey(x):
    return x[0]   # 0:根据第一个元素排序  1:根据第二个元素排序
print(sorted(num,key = getkey))

5.元组(tuple)

  • 有序的不可变的元素集合
  • 列表适合存储在程序运行期间可能变化的数据集,而元组可以看作元素不可修改的列表
  • 列表转换为元组tuple(seq),其中seq为列表名字 

  5.1 定义方式

  • 一个元素:(666 一个元素时一定要在后面添加一个逗号,否则会报错
  • 多个元素:(1,2,“abc”) ,此时也可以省略括号,默认为元组,但一般不省略

   5.2 常用操作

     5.2.1查询(与列表类似)

  • 获取单个元素:tuple [ index ]                          tuple为元组名字
  • 获取多个元素:tuple [ start : end : step ]         ...
  • 统计指定元素个数:tuple.count (object)          ...
  • 获取元素对应索引:tuple.index (object)          tuple为元组名字

     5.2.2拼接拆包

  • 拼接:乘法与加法与列表(4.2.1)中一样,元组和列表不能一起相加
  • 拆包:将元组中的元素取出    a , b = (a , b)

6.字典(dictory)

  • 无序的, 可变的键--值对的集合
  • 键——值对:每个键都和一个值对应
  • 意义:通过键来访问相对应的值,使得访问更有意义与效率,例如通过“name”键访问名字
alien = {"name":"people","color":"green"}
# name和color为键,后面为对应的值
# 通过访问键来获取相应的值
print(alien["name"])

  6.1 定义方式

  1. 方式一:{key: value, key: value...}
  2. 方式二:类调用:fromkeys(S, v=None) , 此处S可以为字符串,列表,元组(不能为字典)                                                                           v是对应的值
     
    alien = dict.fromkeys("abc",666)
    print(alien)
    # 结果为 {'a': 666, 'c': 666, 'b': 666}
  • 注意: 
  •          (1)key不能重复,否则会被后者覆盖
  •          (2)key必须是不可变的值 (可变:列表 字典 可变集合)

                                                             (不可变:数值 布尔 字符串 元组)

  •             检测是否为可变的值的方法,修改后,看看id()是否会改变,若改变,则为不可变值

  6.2 常用操作(函数) 

  • 在使用时应该用dic. 函数(),其中dic为要操作的字典的名字

     6.2.1 增、删、改 

函数作用备注
dic [ key ] = value新增或修改key对应的值为value当key在原字典中不存在时,即为新增操作
del  dic[key]删除指定键值对

 key,必须要存在

若直接del dic,则删除字典

dic.pop(key,default)删除指定的键值对, 并返回对应的值若key不存在, 则返回给定的default值,不作删除;若未给定defaul值,则报错

dic.popitem()

无需参数

  删除按升序排序后的第一个键值对, 并以元组的形式返回该键值对 若字典为空, 则报错

dic.clear()

无需参数

删除所有键值对,返回None字典本身还存在,但内容被清空
    olddic.update(newdic)批量修改键值对
        根据新字典, 批量更新旧字典中的键值对
        如果旧字典没有对应的key, 则新增键值对

olddic:旧字典名字

newdic:新字典名字

zdold = {"name":"tutu","age":18}
zdnew = {"name":"tutu","age":20,"address":"北京"}

zdold.update(zdnew)
print(zdold)
# 修改后结果为:zdold = {'name': 'tutu', 'age': 20, 'address': '北京'}

     6.2.2 查询操作  

函数作用备注
dic [ key ]获取单个key若不存在,会报错
dic.get ( key , default )获取单个key若不存在,返回None或default对应的值
dic.setdefault( key , default )获取单个key若不存在,会新增这个key,对应值为default
dic.values()无需参数获取所有的值

python3.x版本中这三个函数的输出值是一个view object,好处是你如果修改了原字典,这三个函数输出的值也会跟着改

dic.keys()无需参数获取所有的键
dic.items()无需参数获取所有键值对,并以元组返回
for key in dic遍历所有的key

7.集合(set)

  • 无序的(没有下标), 不可随机访问的(没有key), 不可重复的元素集合,类似数学中的集合
  • 集合中元素为不可变类型(数值 布尔 字符串 元组)
  • 可以进行交、并、补、差运算
  • 分为可变集合(set)和非可变集合(frozenset)(无法增 删 改)

 7.1 定义方式 

     7.1.1 可变集合  

  • 方式一: s = {1,2,3}       仅仅可变集合有    创建空集合只能用set(),用{ }会识别成字典
  • 方式二:函数 s = set(iterable)      当iterable为dict时,只会获取Key作为set的元素
  • 方式三:推导式  s = {表达式 for 变量 in  xxx  if 条件 }与列表定义类似

      7.1.2 不可变集合  

  • 方式一:函数 s = frozenset(iterable) 
  • 方式二:推导式 s = frozenset(表达式 for 变量 in  xxx  if 条件)

 7.2 常用操作  

  • 在使用时应该用set. 函数(),其中set为要操作的集合的名字
函数作用备注

set.add(element)

添加一个元素

必须是不可变类型

(数值 布尔 字符串 元组)

set.remove(element)删除一个元素
set.pop( )随机删除并返回一个集合中的元素

A.intersection(B) 或

A & B

计算集合A和B的交集输出集合是否可变以A为准

A.union(B)或

A | B

计算集合A和B的并集

A.difference(B)或

A - B

计算集合A减B的差集
A.isdisjoint(B)判定两个集合是否相交
A.issuperset(B)判定A是否包含B

8.时间日历

  • 分为time、calendar、datatime三个模块

  8.1 time模块

  • 提供了处理时间和表示之间转换的功能
  • 在使用之前要先导入time模块(import time),time.函数()
函数作用备注
time. time()获取时间戳从0时区的1970年1月1日0时0分0秒, 到所给定日期时间的秒数
time. localtime(seconds)获取时间元组    seconds:时间戳
       默认当前时间戳
time. ctime (seconds)
 
获取格式化时间
time. strftime(格式字符串, 时间元组)自定义格式化时间可以搜索常用格式符
time. clock()

获取当前CPU时间

一般用来统计程序运行时间

在代码前后各用一次,做差

time.sleep(secs)休眠n秒

  8.2 calendar模块

  • 提供与日历相关的功能
  • 比如: 为给定的月份或年份打印文本日历的功能
  • 使用方法:首先import calendar,然后calendar.month(2017, 9)

  8.3 datatime模块

  • Python处理日期和时间的标准库。此外里面还有具体的类如datatime,data,time类
  • 要先导入datatime模块(import datatime)
  • 在使用时,不仅要用库的名字,还要写类的名字,例如:datatime.datatime.now()
    函数作用备注
    datatime.datatime.today()获取当前时间还可单独获取年月日...
     datetime.datetime.today() + datetime.timedelta(days = n)获取n天后的日期

  • 32
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值