基本数据类型
标准数据类型
Python3 中有六个标准的数据类型:
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Sets(集合)
- Dictionary(字典)
a = 10.
内置的 type(a) 函数可以用来查询变量所指的对象类型。
dir(a)可以查看内置函数名称,help()查看内置函数功能,或者help(type(a))。
n1 = 123
n2 = 123
Python内部优化, -5~256 ,占用同一内存地址。查看内存地址: id(变量名)
几本数据类型常用功能:
int类型
bit.length()
str类型
def capitalize(self): """ 首字母变大写 """
def center(self, width, fillchar=None): """ 内容居中,width:总长度;fillchar:空白处填充内容,默认无 """
def count(self, sub, start=None, end=None): """ 子序列个数 """
def endswith(self, suffix, start=None, end=None): """ 是否以 xxx 结束 """
def expandtabs(self, tabsize=None): """ 将tab转换成空格,默认一个tab转换成8个空格 """
def find(self, sub, start=None, end=None): """ 寻找子序列位置,如果没找到,返回 -1 """
def format(*args, **kwargs): # known special case of str.format """ 字符串格式化,动态参数,将函数式编程时细说 """
**************************
s = "hello {0}, age {1}"
print(s)
#{0} {1} 可以作为占位符
new1 = s.format("alex", 19)
print(new1)
**************************
def index(self, sub, start=None, end=None): """ 子序列位置,如果没找到,报错 """
跟find类似,但是find返回-1,index报错
def isalnum(self): def isalpha(self): def isdigit(self):
""" 是否是字母和数字 """ """ 是否是字母 """ """ 是否是数字 """
def join(self, iterable): ###iterable 可迭代的
""" 连接 """
********************************
li = ["alex", "lilei", "xiaoming"]
"_".join(li)
********************************
def ljust(self, width, fillchar=None): """ 内容左对齐,右侧填充 """
def replace(self, old, new, count=None): """ 替换 """
def lower(self): """ 变小写 """
def lstrip(self, chars=None): """ 移除左侧空白 """
def partition(self, sep): """ 分割,前,中,后三部分 """
def split(self, sep=None, maxsplit=None): """分割, maxsplit最多分割几次"""
字符串索引和切片
变量[头下标:尾下标]
索引值以 0 为开始值,-1 为从末尾的开始位置。>=头下标,<尾下标。
s = "alex"
s[0] 索引
s[0:2] 切片
len(s) 字符串长度
for item in s:
print(item)
List列表
变量[头下标:尾下标]
索引值以 0 为开始值,-1 为从末尾的开始位置。
list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
list[0] 索引
list[0:2] 切片
len(list) 列表长度
del list[1] 删除指定元素
for item in list:
print(item)
def append(self, p_object): """ 在列表后边追加元素 """
def count(self, value): """ 统计元素出现的次数 """
def extend(self, iterable): """ iterable,可迭代的(只要能用for循环的都是可迭代的),批量添加元素到列表 """
def index(self, value, start=None, stop=None): """ 获取某个元素 """
def insert(self, index, p_object): """ 在某个位置插入元素 """
def pop(self, index=None): """ 移除列表中尾部元素并返回这个元素 """
def remove(self, value): """ 移除某个元素 """
def reverse(self): """ 反转列表中元素顺序 """
tuple元祖
元组(tuple)与列表类似,不同之处在于元组的元素不能修改,元祖的元素可以被修改。元组写在小括号(())里,元素之间用逗号隔开。
name_tuple = ("alex", "lilei", "xiaoming")
name_tuple[0]
name_tuple[0:2]
def count(self, value): """ 计算元素出现的次数 """
def index(self, value, start=None, stop=None): """ 获取指定元素的索引位置 """
set集合
集合(set)是一个无序不重复元素的序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
def add(self, *args, **kwargs):
""" 添加 """
def clear(self, *args, **kwargs): """ 清除所有元素 """
def difference(self, *args, **kwargs): """ 找两个集合中的不同元素 """
def difference_update(self, *args, **kwargs): """ 删除当前set中的所有包含在 new set 里的元素 """
def discard(self, *args, **kwargs): """ 移除元素 """
def intersection(self, *args, **kwargs): """ 取交集,新创建一个set """
def intersection_update(self, *args, **kwargs): """ 取交集,修改原来set """
def isdisjoint(self, *args, **kwargs): """ 如果没有交集,返回true """
def issubset(self, *args, **kwargs): """ 是否是子集 """
def issuperset(self, *args, **kwargs): """ 是否是父集 """
def remove(self, *args, **kwargs): """ 移除,跟discard功能相同,但是如果没有会报错,discard不会 """
def pop(self, *args, **kwargs): """ 移除并返回移除的值 """
def symmetric_difference(self, *args, **kwargs): """ 差集,创建新对象"""
def symmetric_difference_update(self, *args, **kwargs): """ 差集,改变原来 """
def union(self, *args, **kwargs): """ 并集 """
def update(self, *args, **kwargs): """ 更新 """
dict字典
字典是一种映射类型,键值对,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合。
user_info = { "name": "alex", "age": 73, "gender": "M"}
user_info["name"] 索引
user_info.keys() 获取所有的键
user_info.values() 获取所有的值
user_info.items() 获取所有的键值对
del user_info["name"]
for item in user_info: 默认循环输出的是键
print(item)
for k, v in user_info.items():
print(k, v)
def clear(self): """ 清除内容 """
def get(self, k, d=None): """ 根据key获取值,d是默认值 """
def items(self): """ 所有项的列表形式 """
def pop(self, k, d=None): """ 获取并在字典中移除 """
def update(self, E=None, **F): """ 更新 """
enumerate 为可迭代的对象添加序号
li = [11, 22, 33]
for key, item in enumerate(li, 1):
print(key, item)
bytes类型
UTF-8编码,一个汉字,3个字节
gbk编码,一个汉字,2个字节
三元运算
result = 值1 if 条件 else 值2
如果条件为真:result = 值1
如果条件为假:result = 值2
bytes和str之间的异同
回到bytes和str的身上。bytes是一种比特流,它的存在形式是01010001110这种。我们无论是在写代码,还是阅读文章的过程中,肯定不会有人直接阅读这种比特流,它必须有一个编码方式,使得它变成有意义的比特流,而不是一堆晦涩难懂的01组合。因为编码方式的不同,对这个比特流的解读也会不同,对实际使用造成了很大的困扰。下面让我们看看Python是如何处理这一系列编码问题的:
>>> s = "中文"
>>> s
'中文'
>>> type(s)
<class 'str'>
>>> b = bytes(s, encoding='utf-8')
>>> b
b'\xe4\xb8\xad\xe6\x96\x87'
>>> type(b)
<class 'bytes'>
从例子可以看出,s是个字符串类型。Python有个内置函数bytes()可以将字符串str类型转换成bytes类型,b实际上是一串01的组合,但为了在ide环境中让我们相对直观的观察,它被表现成了b'\xe4\xb8\xad\xe6\x96\x87'这种形式,开头的b表示这是一个bytes类型。\xe4是十六进制的表示方式,它占用1个字节的长度,因此”中文“被编码成utf-8后,我们可以数得出一共用了6个字节,每个汉字占用3个,这印证了上面的论述。在使用内置函数bytes()的时候,必须明确encoding的参数,不可省略。
我们都知道,字符串类str里有一个encode()方法,它是从字符串向比特流的编码过程。而bytes类型恰好有个decode()方法,它是从比特流向字符串解码的过程。除此之外,我们查看Python源码会发现bytes和str拥有几乎一模一样的方法列表,最大的区别就是encode和decode。
从实质上来说,字符串在磁盘上的保存形式也是01的组合,也需要编码解码。
如果,上面的阐述还不能让你搞清楚两者的区别,那么记住下面两几句话:
-
在将字符串存入磁盘和从磁盘读取字符串的过程中,Python自动地帮你完成了编码和解码的工作,你不需要关心它的过程。
-
使用
bytes类型,实质上是告诉Python,不需要它帮你自动地完成编码和解码的工作,而是用户自己手动进行,并指定编码格式。 -
Python已经严格区分了
bytes和str两种数据类型,你不能在需要bytes类型参数的时候使用str参数,反之亦然。这点在读写磁盘文件时容易碰到。
在bytes和str的互相转换过程中,实际就是编码解码的过程,必须显式地指定编码格式。
>>> b
b'\xe4\xb8\xad\xe6\x96\x87'
>>> type(b)
<class 'bytes'>
>>> s1 = str(b)
>>> s1
"b'\\xe4\\xb8\\xad\\xe6\\x96\\x87'"
>>> type(s1)
<class 'str'>
>>> s1 = str(b, encoding='utf-8')
>>> s1
'中文'
>>> type(s1)
<class 'str'>
我们再把字符串s1,转换成gbk编码的bytes类型:
>>> s1
'中文'
>>> type(s1)
<class 'str'>
>>> b = bytes(s1, encoding='gbk')
>>> b
b'\xd6\xd0\xce\xc4'
list:创建列表,将其他元素转换成列表
s1 = "李璐"
l1 = list(s1)
注意:
一般字符串,执行一个功能,生成一个新内容,原来内容不变
list,tuple,dict, 执行一个功能,自身进行变化
作业:
一、元素分类
有如下值集合[11,22,33,44,55,66,77,88,99,90],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中。
二、查找
查找列表中元素,移动空格,并查找以a或A开头并且以c结尾的所有元素。
li = ["laec", "aric", "Alex", "Tony", "rain"]
tu = ("alec", "aric", "Alex", "Tony", "rain")
dic = {"k1": "alex", "k2": "aric", "k3": "Alex", "k4": "Tony"}
三、输出商品列表,用户输入序号,显示用户选中的商品
商品 li = ["手机", "电脑", "显示器", “游艇”]
四、购物车
功能要求:
要求用户输入总资产,例如:2000
显示商品列表,让用户更具序号选择商品, 加入购物车
购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功
附加:可充值,某商品移除购物车
goods = [
{"name": "电脑", "price": 1990},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
]
五、用户交互,显示省市县三级联动的选择
dic = {
"河北": {
"石家庄": ["鹿泉", "藁城", "元氏"],
"邯郸": ["永年", "涉县", "磁县"],
}
"河南": {
...
}
"山西": {
...
}
}

浙公网安备 33010602011771号