Python学习笔记(3)-数据类型


前言

闲来无事,复习一下python,记录一下。这篇主要是数据类型相关。


数字类型

整数类型

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!)。整数类型有如下四种进制表示形式

  • 十进制:1010, 99, -217
  • 二进制,以0b或0B开头:0b010, -0B101
  • 八进制,以0o或0O开头:0o123, -0O456
  • 十六进制,以0x或0X开头:0x9a, -0X89

浮点类型

浮点数运算则可能会有四舍五入的误差。是因为浮点数间运算存在不确定尾数,不是bug。二进制表示小数,可以无限接近,但不完全相同。

  • round(x, d):对x四舍五入,d是小数截取位数
  • 浮点数间运算与比较用round()函数辅助
  • 不确定尾数一般发生在10-16左右,round()十分有效
  • 浮点数可以采用科学计数法表示:使用字母e或E作为幂的符号,以10为基数,
    格式如下:<a>e<b> 表示a*10b

字符串类型

Python字符串的编码方式

  • 统一字符编码,即覆盖几乎所有字符的编码方式
  • 从0到1114111(0x10FFFF)空间,每个编码对应一个字符
  • Python字符串中每个字符都是Unicode编码字符

Python字符串表示

字符串是字符的有序序列,可以对其中的字符进行索引。正向递增序号为从零开始;反向递减序号为-1开始。
字符串可以用双引号",也可以用单引号’括起来。使用[ ]获取字符串中一个或多个字符。
使用[M:N: K]根据步长对字符串切片

  • <字符串>[M: N],M缺失表示至开头,N缺失表示至结尾

“〇一二三四五六七八九十”[:3]结果是"〇一二"

  • <字符串>[M: N: K],根据步长K对字符串切片
"〇一二三四五六七八九十"[1:8:2] 结果是"一三五七" 	
"〇一二三四五六七八九十"[::-1] 结果是"十九八七六五四三二一〇"

Python字符串格式化

字符串格式化使用.format()方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)


在这里插入图片描述

字符串处理函数

函数及使用描述
len(x)长度,返回字符串x的长度:len(“一二三456”) 结果为6
str(x)任意类型x所对应的字符串形式:str(1.23)结果为"1.23"str([1,2])结果为"[1,2]"
hex(x)或oct(x)整数x的十六进制或八进制小写形式字符串:hex(425)结果为"0x1a9"oct(425)结果为"0o651"
chr(u)x为Unicode编码,返回其对应的字符
ord(x)x为字符,返回其对应的Unicode编码
str.lower()或str.upper()返回字符串的副本,全部字符小写/大写:“AbCdEfGh”.lower()结果为"abcdefgh"
str.split(sep=None)返回一个列表,由str根据sep被分隔的部分组成:“A,B,C”.split(“,”)结果为[‘A’,‘B’,‘C’]
str.count(sub)返回子串sub在str中出现的次数:“an apple a day”.count(“a”)结果为4
str.replace(old, new)返回字符串str副本,所有old子串被替换为new:“python”.replace(“n”,“n123.io”)结果为"python123.io"
str.center(width[,fillchar])字符串str根据宽度width居中,fillchar可选:“python”.center(20,“=”)结果为’=python=’
str.strip(chars)从str中去掉在其左侧和右侧chars中列出的字符:“= python= “.strip(”=np”)结果为"ytho"
str.join(iter)在iter变量除最后元素外每个元素后增加一个str:“,”.join(“12345”)结果为"1,2,3,4,5"#主要用于字符串分隔等

例子

  1. 三次方格式化
    获得用户输入的一个数字,可能是整数或浮点数,a,计算a的三次方值,并打印输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
    输出结果采用宽度20个字符、居中输出、多余字符采用减号(-)填充。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
    如果结果超过20个字符,则以结果宽度为准。
a = eval(input())
print("{:-^20}".format(pow(a, 3)))
  1. 星号三角形
    读入一个整数N,N是奇数,输出由星号字符组成的等边三角形,要求:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
    第1行1个星号,第2行3个星号,第3行5个星号,依次类推,最后一行共N的星号。
n = eval(input())
for i in range(1,n+1,2):
    print("{0:^{1}}".format('*'*i, n))

在Python中,可以直接用True、False表示布尔值(请注意大小写)。

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

组合数据类型

序列类型

序列是具有先后关系的一组元素。元素类型可以不同。元素间由序号引导,通过下标进行访问。和字符串一样,有正向和反向序号。

扩展类型

  • 字符串
  • 元组 tuple
  • 列表 list
    操作符
操作符及应用描述
x in s如果x是序列s的元素,返回True,否则返回False
x not in s如果x是序列s的元素,返回False,否则返回True
s+ t连接两个序列s和t
sn 或ns将序列s复制n次
s[i]索引,返回s中的第i个元素,i是序列的序号
s[i: j]或s[i: j: k]切片,返回序列s中第i到j以k为步长的元素子序列

函数和方法

函数和方法描述
len(s)返回序列s的长度,即元素个数
min(s)返回序列s的最小元素,s中元素需要可比较
max(s)返回序列s的最大元素,s中元素需要可比较
s.index(x) 或s.index(x, i,j)返回序列s从i开始到j位置中第一次出现元素x的位置
s.count(x)返回序列s中出现x的总次数

tuple使用圆括号()或tuple()创建,元素间用逗号分隔。一旦初始化不可改变。可以使用或不使用小括号。

list使用方括号[]或list()创建,元素可变;列表中各元素类型可以不同,无长度限制。

list函数和方法

函数和方法描述
ls[i] = x替换列表ls第i元素为x
ls[i: j: k]= lt用列表lt替换ls切片后所对应元素子列表
del ls[i]删除列表ls中第i元素
del ls[i: j: k]删除列表ls中第i到第j以k为步长的元素
ls+= lt更新列表ls,将列表lt元素增加到列表ls中
ls*= n更新列表ls,其元素重复n次
ls.append(x)在列表ls最后增加一个元素x
ls.clear()删除列表ls中所有元素
ls.copy()生成一个新列表,赋值ls中所有元素
ls.insert(i,x)在列表ls的第i位置增加元素x
ls.pop(i)将列表ls中第i位置元素取出并删除该元素
ls.remove(x)将列表ls中出现的第一个元素x删除
ls.reverse()将列表ls中的元素反转

应用场景

  • 元素遍历
  • 数据保护,如果不希望数据被程序所改变,转换成元组类型

实例

#CalStatisticsV1.py
def getNum():       #获取用户不定长度的输入
    nums = []
    iNumStr = input("请输入数字(回车退出): ")
    while iNumStr != "":
        nums.append(eval(iNumStr))
        iNumStr = input("请输入数字(回车退出): ")
    return nums

def mean(numbers):  #计算平均值
    s = 0.0
    for num in numbers:
        s = s + num
    return s / len(numbers)

def dev(numbers, mean): #计算方差
    sdev = 0.0
    for num in numbers:
        sdev = sdev + (num - mean)**2
    return pow(sdev / (len(numbers)-1), 0.5)

def median(numbers):    #计算中位数
    sorted(numbers)
    size = len(numbers)
    if size % 2 == 0:
        med = (numbers[size//2-1] + numbers[size//2])/2
    else:
        med = numbers[size//2]
    return med

n =  getNum() #主体函数
m =  mean(n)
print("平均值:{},方差:{:.2},中位数:{}.".format(m, dev(n,m),median(n)))

dict和set

dict

dict用花括号括起来,对应的是map,存放键值对。
请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的。

和list比较,dict有以下几个特点:

查找和插入的速度极快,不会随着key的增加而变慢;
需要占用大量的内存,内存浪费多。
而list相反:

查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。

dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。

这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。

要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key.

dict函数和方法

函数和方法描述
deld[k]删除字典d中键k对应的数据值
k in d判断键k是否在字典d中,如果在返回True,否则False
d.keys()返回字典d中所有的键信息
d.values()返回字典d中所有的值信息
d.items()返回字典d中所有的键值对信息
d.get(k, )键k存在,则返回相应值,不在则返回值
d.pop(k, )键k存在,则取出相应值,不在则返回值
d.popitem()随机从字典d中取出一个键值对,以元组形式返回
d.clear()删除所有的键值对
len(d)返回字典d中元素的个数

set

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。要创建一个set,需要提供一个list作为输入集合。

  • 集合用大括号{} 表示,元素间用逗号分隔
  • 建立集合类型用{} 或set()
  • 建立空集合类型,必须使用set()

操作符
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。

操作符及应用描述
ST
S-T差,返回一个新集合,包括在集合S但不在T中的元素
S & T交,返回一个新集合,包括同时在集合S和T中的元素
S ^ T补,返回一个新集合,包括集合S和T中的非相同元素
S <= T 或S < T返回True/False,判断S和T的子集关系
S >= T 或S > T返回True/False,判断S和T的包含关系

set函数和方法

函数和方法描述
S.add(x)如果x不在集合S中,将x增加到S
S.discard(x)移除S中元素x,如果x不在集合S中,不报错
S.remove(x)移除S中元素x,如果x不在集合S中,产生KeyError异常
S.clear()移除S中所有元素
S.pop()随机返回S的一个元素,更新S,若S为空产生KeyError异常
S.copy()返回集合S的一个副本
len(S)返回集合S的元素个数
xin S判断S中元素x,x在集合S中,返回True,否则返回False
xnot in S判断S中元素x,x不在集合S中,返回True,否则返回False
set(x)将其他类型变量x转变为集合类型

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。
主要用来进行数据去重处理。

实例

#CalHamletV1.py
def getText():
    txt = open("hamlet.txt", "r").read()
    txt = txt.lower()
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
        txt = txt.replace(ch, " ")   #将文本中特殊字符替换为空格
    return txt

hamletTxt = getText()
words  = hamletTxt.split()
counts = {}
for word in words:			
    counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True) 
for i in range(10):
    word, count = items[i]
    print ("{0:<10}{1:>5}".format(word, count))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值