Python基础之基本数据类型(一)

602 阅读5分钟

1.Introduce

python面向对象,不同的数据类型都是对象,面向对象的操作具有很多对象可调用的方法~
要注意一部分内置函数与方法的区别:

1. 1 内置函数

  • 数学类
    • abs(-123)
    • pow(a,y[,z])a的y次方对z求模的结果
    • round(a,[,ndigit])四舍五入精度,正好为5时舍入到偶数
  • 列表操作类
    • sorted(lst)返回list
    • reversed(lst)返回迭代器<list_reverseiterator at 0x102b22438>,常转换一下a=list(reversed(a))
  • 数据类型转换类
    • float(9),int(9.0),str(object)
  • 其余类
    • help([object]),提供帮助文档
    • input(inputs)
    • repr(str)

1.2模块中的方法

  • 数学类
    • math模块:对实数基本的数学操作都有
      math.ceil(3.3)向上圆,math.floor(3.3)向下圆,math.sqrt(9)不能负数
    • cmath模块:对复数基本的数学操作
      cmath.sqrt(-9)
  • 列表操作类
    • lst.reverse(),原地反转
    • lst.sort(),原地排序

2.序列:列表、元组、字符串

2.1通用方法

  • 索引
    从0开始
  • 切片
    索引有问题返回[],[起,末+1,step],step为负数就反向取
  • 加+
    同类型相连接
  • *
    成倍数创建[None]*10
  • 成员资格检查
    in返回True or False
  • 内置函数min(),max(),len()

2.2列表

  • 赋值:=,给元素或切片赋值,不能给不存在的元素赋值
  • 删除:del a[9],也可用赋值一个空切片[]代替
  • 列表方法方法是与对象关联的函数,所以用object.调用。
    • lst.append(a)
    • lst.clear()清空列表内容
    • lst.copy(a)复制,b=a指向同一处,可以用b=list(a)或b=a[:]或b=a.copy()
    • lst.count(a),计算指定元素出现次数
    • lst.extend(lst2),在原列表末尾添加,不同于+,+是返回一个新对象,a=a+b的效率比extend低
    • lst.index(a)返回a第一次出现的索引
    • lst.insert(index,a)
    • lst.pop(index)删除元素且返回
    • lst.remove(str),删除指定值的第一个
    • lst.reverse(),原地反转
    • lst.sort(),原地排序
    • 高级排序:lst.sort(key = len,reverse=True),true则大到小,key可以自己指定

2.3元组

  • 不可修改的序列
  • 一个值(42,)
  • 常用作映射的key

2.4字符串

  • 输出格式操作:
#替换字段名
print("{foo} {} {bar} {}".format(1,2,bar = 4, foo = 3))
fullname = ["Alfred","Smoketoomuch"]
print("Mr {name[1]}".format(name = fullname))#Mr Smoketoomuch

print("{pi!s} {pi!r} {pi!a}".format(pi = "π"))#π 'π' '\u03c0',个标志(s、r和a)指定分别使用str、repr和ascii进行转换
print("The number is {num:f}".format(num = 42))#字符f(表示浮点数)。42.000000
print("The number is {num:b}".format(num = 42))#二进制数,101010

#宽度、精度
pi = 3.14
print("{num:10}".format(num = 3))
print("{name:10}".format(name = "Bob"))
print("{pi:10.2f}".format(pi = pi))

#符号,对齐,0填充
print('{:010.2f}'.format(pi))#0填充
print('{0:<10.2f}\n{0:^10.2f}\n{0:>10.2f}'.format(pi))#左中右对齐
print('{0:10.2f}\n{1:=10.2f}'.format(pi,-pi))#说明符=,它指定将填充字符放在符号和数字之间
  • 字符串方法:很多都从string继承
#str.center()
str = 'strr'
print(str.center(9, "*"))
a = str.center(9, "*")#因为是字符串,所以没有在本身上改,是返回一个修改后的

#str.find()
str1 = 's'
print(str.find(str1))#返回第一个字母索引
str.find('r',0,3)#开始索引、结束索引,通常是字符串长度

#str.join(str1)合并序列的元素
#str.lower()返回字符串小写版本,upper()大写版本
#str.replace(a,b)替换
#str.split()拆分,返回列表
#str.strip('*'),str.lstrip(),str.rstrip()去除头尾的指定字符
#str()和repr()强制转换
#hex(),oct(),bin(),int()化为不同进制的字符串


#str.translate()
table = str.maketrans('cs','kz',' ')#先调用方法maketrans,替换所有cs to kz,第三个参数表示删除字符
print('this is an incredible test'.translate(table))

#判断字符是否满足某些条件:isalnum、isalpha、isdecimal、isdigit、isidentifier、islower、isnumeric、 isprintable、isspace、istitle、isupper

3.字典

只用索引行不通时,希望有另一种映射,比如 names = ['Alice', 'Beth', 'Cecil', 'Dee-Dee', 'Earl'],numbers = ['2341', '9102', '3158', '0142', '5551'] ,要找Cecil的电话号码numbers[names.index('Cecil')]

  • 创建字典
    键是不可变类型的序列
#(1)用函数dict,从其他映射例如元组、列表中创建
items = [('name','Gumby'),('age',42)]
d = dict(items)
print(d)
#(2)加上关键字实参
d = dict(name = 'Gumby',age = 42)

phonebook={'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
print("Cecil's phone number is {Cecil}.".format_map(phonebook))
#k in items是检查是否有键
  • 字典方法
#d.clear()删除

#字典的复制
x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
y = x.copy()#deepcopy是深复制
#(1)替换副本y的值时,原件x不受影响,因为'='表示让y指向另一块存储空间,原空间并没变!!!
y['username'] = 'mlh'
#(2)修改副本y的值时,因为列表是原地,所以原件x受影响
y['machines'].remove('bar')

#d.fromkeys()
print({}.fromkeys(['name', 'age']))#先创建了一个空字典,再创建key
print(dict.fromkeys(['name', 'age']))#也可以用dict类型
print(dict.fromkeys(['name', 'age']),'(unknown)')#更改默认值类型

#d.get()访问
d.get('name', 'N/A')#不存在时输出默认值

#d.items(),包含所有字典项的列表
#d.keys(),d.values()
#d.pop(k),返回值,删除键值对
#d.popitem()弹出最后一项,字典本身无序
#d.setdefault('name', 'N/A'),指定默认值,不存在时添加该键,存在时不变
#d.update(d1),把字典d1添加进字典d

4. 集合

  • 创建:使用序列创建,内置类set(range(10))
  • 不能用{}创建空集合,这只会创建新字典
  • 集合是可变的,不能用作字典的键,只能包含不可变(可散列) 的值,因此不能包含其他集合
#集合主要用于成员资格检查,因此将忽略 重复的元素:
{0, 1, 2, 3, 0, 1, 2, 3, 4, 5}
#与字典一样,集合中元素的排列顺序是不确定的

a = {1, 2, 3}
b = {2, 3, 4}
#并集
a.union(b)
a | b
#交集
a.intersection(b)
c = a & b
#判断子集
c.issubset(a)
c <= a
#判断父集
c.issuperset(a)
c >= a
#差
a.difference(b)
a - b
#对称差
a.symmetric_difference(b)
a ^ b
#复制
a.copy()
a.copy() is a#false
#其余方法
s.add(a)添加一个元素
s.update([])添加多个元素
s.remove(a)可能报错,但s.discard()不会报错
#不可变集合
s = frozenset([])一旦创建就不能改变