目录

  • 前言
  • 数字类型
  • 整数类型
  • 浮点类型
  • 字符串类型
  • Python字符串的编码方式
  • Python字符串表示
  • Python字符串格式化
  • 字符串处理函数
  • 组合数据类型
  • 序列类型
  • dict和set
  • dict
  • set



前言



闲来无事,复习一下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(<逗号分隔的参数>)

python实现求解未知数 python未知数定义_字符串


python实现求解未知数 python未知数定义_python_02

字符串处理函数

函数及使用

描述

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可以做数学意义上的交集、并集等操作。

操作符及应用

描述

S

T

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))