@
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异常
后语
此篇所用许多例子是当初做笔记时在网上找的,每当碰到一些问题,我会在其中作些补充,但准确来说,它只能算作拼接而成的作品。文后本该注明一堆来源,但也不知道当初取自何处,在此向相关作者表示歉意。
文中许多措辞并不严谨、统一,以后会再做修改。