python的基本对象类型介绍
python的基本对象类型介绍
字符串(strings)
字符串中的元素可以索引、切片,但不可修改。
字符串之间可以拼接形成新的字符串
字符串的相关操作
描述 | 示例 |
---|---|
创建空字符串 | str=‘’ |
创建Unicode 字符串 | str=u’Hello World !’ |
字符串拼接 | ‘hi’+‘strelitzia’ #结果是‘histrelitzia’ |
字符串可使用的一些方法
格式 | 描述 |
---|---|
string.capitalize() | 把字符串的第一个字符大写 |
string.center(width) | 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 |
string.count(str, beg=0, end=len(string)) | 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 |
string.decode(encoding=‘UTF-8’, errors=‘strict’) | 以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 ‘ignore’ 或 者’replace’ |
string.encode(encoding=‘UTF-8’, errors=‘strict’) | 以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’ |
string.endswith(obj, beg=0, end=len(string)) | 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. |
string.expandtabs(tabsize=8) | 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。 |
string.find(str, beg=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 |
string.format() | 格式化字符串 |
string.index(str, beg=0, end=len(string)) | 跟find()方法一样,只不过如果str不在 string中会报一个异常. |
string.isalnum() | 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False |
string.isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True, |
string.isdecimal() | 如果 string 只包含十进制数字则返回 True 否则返回 False. |
string.isdigit() | 如果 string 只包含数字则返回 True 否则返回 False. |
string.islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
string.isnumeric() | 如果 string 中只包含数字字符,则返回 True,否则返回 False |
string.isspace() | 如果 string 中只包含空格,则返回 True,否则返回 False. |
string.istitle() | 如果 string 是标题化的(见 title())则返回 True,否则返回 False |
string.isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
string.join(seq) | 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
string.ljust(width) | 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 |
string.lower() | 转换 string 中所有大写字符为小写. |
string.lstrip() | 截掉 string 左边的空格 |
string.maketrans(intab, outtab]) | maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 |
max(str) | 返回字符串 str 中最大的字母。 |
min(str) | 返回字符串 str 中最小的字母。 |
string.partition(str) | 有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string. |
string.replace(str1, str2, num=string.count(str1)) | 把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次. |
string.rfind(str, beg=0,end=len(string) ) | string.rfind(str, beg=0,end=len(string) ) |
string.rindex( str, beg=0,end=len(string)) | 类似于 index(),不过是从右边开始. |
string.rjust(width) | 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 |
string.rpartition(str) | 类似于 partition()函数,不过是从右边开始查找 |
string.rstrip() | 删除 string 字符串末尾的空格. |
string.split(str="", num=string.count(str)) | 以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+ 个子字符串 |
string.splitlines([keepends]) | 按照行(’\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 |
string.startswith(obj, beg=0,end=len(string)) | 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查. |
string.strip([obj]) | 在 string 上执行 lstrip()和 rstrip() |
string.swapcase() | 翻转 string 中的大小写 |
string.title() | 返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) |
string.translate(str, del="") | 根据 str 给出的表(包含 256 个字符)转换 string 的字符, |
string.upper() | 返回一个将原字符串全大写后的新字符串 |
string.zfill(width) | 返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0 |
元组(tuple)
元组(tuple)与列表类似,但元组的元素不能修改。前者使用小括号 ( ),后者使用方括号 [ ]。
元组的括号有时会省略
元组与字符串类似,可以被索引且下标索引从0开始,-1 为从末尾开始的位置。也可以进行截取。可以把字符串看作一种特殊的元组。
虽然tuple的元素不可改变,但它可以包含可变的对象,即我们可以对元组中的可变元素(列表、集合、字典)进行操作。示例如下:
a = ([], 2, 'a')
a[0].append(3)
#a[0]=[3]会报错:TypeError: 'tuple' object does not support item assignment
print(a)
#([3], 2, 'a')
元组的相关操作
描述 | 示例 |
---|---|
创建空元组 | tuple= () |
创建单元素元组 | tuple = (1,) #若不加逗号,则数据类型括号内元素的类型 |
访问元组中的值 | tuple[0] #返回元组左起第一个元素的值 |
组合元组 | (12,34.56)+(‘abc’,‘xyz’) #得到(12,34.56,‘abc’,‘xyz’) |
删除元组元素 | del tuple[0] #删除元组左起第一个元素 |
删除元组 | del tuple |
重复元组 | (‘Hi!’,) * 4 #得到(‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’) |
判断元素是否在元组中 | 3 in (1, 2, 3) #返回True或者False |
关于元组的引用
a=(1,)
a+=(2,)
print(a)
#(1, 2)
变量a引用了元组(1,),第二步更改引用为(1,)+(2,)。此时元组(1,)没有收到任何引用,释放了内存。这种操作并不是改变了元组内元素。
列表(list)
列表写在方括号 [] 之间,用逗号分隔其中的元素。(元素可以是str、numb,甚至是list)
列表中的元素是可以改变的。
一对中括号的加乘是列表内元素的加乘;两对中括号的加乘是列表层面的加乘。
用生成式生成列表:
data = [7, 20, 3, 15, 11]
result = [num * 3 for num in data if num > 10]
print(result) # [60, 45, 33]
重复列表的修改问题:
A=[[Q]*3]*5
A[x][y]指向列表[Q,Q,Q]中的第y+1个元素。有5个[Q,Q,Q],无论x为何值,修改会同时应用到5个[Q,Q,Q]上,因为它们实际上都引用同一个地址(存储着列表[Q,Q,Q])。
A=[[Q,Q,Q],[Q,Q,Q],[Q,Q,Q],[Q,Q,Q],[Q,Q,Q],]
A[x][y]指向列表A中的第x+1个列表[Q,Q,Q]中的第y+1个元素。修改任一[Q,Q,Q],不会影响其他,因为它们引用的是不同的地址。
用列表表示表格
for row,name in enumerate(names):
for col,course in enumerate(courses):
scores[row][col]=float(input(f'请输入{name}的{course}成绩:'))
print(scores)
name有多少元素,就有多少行(row),courses有多少元素,就有多少列(col),scores[row][col]用来依次表示列表scores中第row+1个列表中的第col+1个元素。
列表的相关操作
描述 | 示例 |
---|---|
创建空列表 | list=[] |
访问列表中的值 | list[0] #返回列表左起第一个元素的值 |
更新列表元素 | list[0] =1 #更改列表左起第一个元素值为1 |
删除列表元素 | del list[0] #删除列表左起第一个元素 |
组合列表内的元素 | [1, 2, 3] + [4, 5, 6] #得到[1, 2, 3, 4, 5, 6] |
组合列表 | [[1, 2, 3] ]+ [[4, 5, 6]] #得到[[1, 2, 3], [4, 5, 6]] |
重复列表内的元素 | [‘Hi!’] * 4 #得到[‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] |
重复列表 | [[‘Hi!’]]* 4 #得到[[‘Hi!’], [‘Hi!’], [‘Hi!’], [‘Hi!’]] |
判断元素是否在列表中 | 3 in [1, 2, 3] #返回True或者False |
列表可使用的一些方法
格式 | 描述 |
---|---|
list.append(obj) | 在列表末尾添加新的对象(如果是列表,那么列表作为一个元素进入) |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 将指定序列中的元素添加进列表中 |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index, obj) | 将对象插入列表中index的位置,例如1,代表第二个元素的位置 |
list.pop([index=-1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素(会改变原列表) |
list.sort( key=None, reverse=False) | 对原列表进行排序 |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
集合(set)
集合中的元素具有无序性、互异性、确定性。
因为无序,所以无法索引集合中的元素,但可以用for循环遍历集合中的元素,或者用关键字in查询集合中是否存在某元素。
集合和字典都不支持索引、切片、相加和相乘操作。
集合输出元素的顺序不定
classes={'SA','BO','ZS','ASD'}
for i,c in enumerate(classes):
print(c)
#
BO
ASD
ZS
SA
集合的相关操作
描述 | 示例 |
---|---|
创建空集合 | set_name = set() #直接“={}”创建的是字典 |
删除集合 | del set_name |
判断元素是否在集合中 | 3 in {1, 2, 3} #返回True或者False |
集合可使用的一些方法
格式 | 描述 |
---|---|
set.add(x) | 将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作 |
set.update([1,2],{3},(4,),{‘rule’:3}) | 添加列表、集合、元组或字典(key)等的元素到集合中,update(iterable) |
set.remove(x) | 将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误 |
set.discard(x) | 移除集合中的元素,且如果元素不存在,不会发生错误 |
set.pop() | 随机删除集合内的一个元素,并返回该元素。 |
set.clear() | 清空集合 |
set.copy() | 返回一个一模一样的新集合,它拥有与原集合不同的id地址 |
set1.difference(set2) | 返回集合1与集合2的差集(相当于移除了与集合2重合元素的集合1) |
set1.difference_update(set2) | 移除集合1中与集合2重复的元素 |
set1.intersection(set2,set3…etc) | 返回多个集合的交集 |
set.intersection_update() | intersection() 方法是返回一个新的集合,而 intersection_update() 方法是在原始的集合上移除不重叠的元素 |
set1.isdisjoint(set2) | 判断集合1和集合2是否存在重合,如果没有返回 True,否则返回 False |
set1.issubset(set) | 判断集合2是否为集合1的母集,如果是则返回 True,否则返回 False |
set1.issuperset(set2) | 判断集合2是否为集合1的子集,如果是则返回 True,否则返回 False |
set1.symmetric_difference(set2) | 返回集合1与集合2的并集,但并集中不存在集合1和集合2的重复元素 |
set1.symmetric_difference_update(set2) | 移除集合1中与集合2重复的元素,然后将集合2的其他元素加入集合1 |
set1.union(set2,set3…etc) | 返回多个集合的并集 |
字典
字典是一种映射类型,字典用 { } 标识,它是一个无序的键(key) : 值(value) 的集合。
集合和字典不支持索引、切片、相加和相乘操作。
字典的键(key)必须为不可变类型,且不能重复。它可以是 str, int, float, tuples, bool等,不能为list, set, dictionary。
{1,2}是集合,而{1:2}是字典。
遍历字典
当dict作为遍历对象时,遍历的只是它的key,而不包含value。例如sorted函数中,sorted(dict,key= lambda x:x[1])会提示超出字符串范围,原因是遍历对象没有value,将x:x[1]改为x:x[0]即可。或者将dict改为dict.items(),便可遍历到key和value两部分。
dict.keys(),iterator,只可遍历key
dict.values(),iterator,只可遍历value
dict.items(),列表形式的元组数组,可遍历key和value。
用zip组合键和值来创建字典
keys = ['1001', '1002', '1003']
values = ['骆昊', '王大锤', '白元芳']
d = dict(zip(keys, values))
print(d)
用生成式生成字典
选出price字典中值大于100的键值对
print(price_1)
price={
'AARL':191.88,
'GOOD':1186.96,
'IBM':149.24,
'ORCL':48.44,
'ACN':166.89,
'FB':208.09,
'SYMC':21.29
}
price_1={x:y for x,y in price.items() if y>100}
字典的相关操作
描述 | 示例 |
---|---|
创建空字典 | dict_name = {} |
访问字典里的值 | dict_name[key] |
增加字典元素 | dict_name[key] = value |
删除字典元素 | del dict_name[key] |
清空字典 | dict_name.clear() |
删除字典 | del dict_name |
字典可使用的一些方法
格式 | 描述 |
---|---|
dict.clear() | 删除字典内所有元素 |
dict.clear() | 删除字典内所有元素 |
dict.copy() | 返回一个字典的浅复制 |
dict.fromkeys() | 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
dict.get(key, default=None) | 返回指定键的值,如果键不在字典中返回 default 设置的默认值 |
key in dict | 如果键在字典dict里返回true,否则返回false |
dict.items() | 以列表返回可遍历的(键, 值) 元组数组。[(a,b),(c,d),(e,f)] |
dict.keys() | dict.keys() |
dict.values() | 以迭代器对象(Python3.x)的形式返回一个字典所有的值。可以使用 list() 来转换为列表 |
dict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default,即none |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
pop(key[,default]) | pop(key[,default]) |
popitem() | 随机返回并删除字典中的一对键和值。返回的形式为(key,value)如果字典已经为空,却调用了此方法,就报出KeyError异常 |
后语
此篇所用许多例子是当初做笔记时在网上找的,每当碰到一些问题,我会在其中作些补充,但准确来说,它只能算作拼接而成的作品。文后本该注明一堆来源,但也不知道当初取自何处,在此向相关作者表示歉意。
文中许多措辞并不严谨、统一,以后会再做修改。