Python_04_元组_字典_字符串操作
元组:Tuple = (1, 2, 3, 4, 5, 6)
元组被称为只读列表,即数据可以被查询,但不能被修改。
所以,列表的切片操作同样适用于元祖
Tuple = (1, )
元组只有一个元素时,需要在这个元素后面加逗号
列表嵌套:list = [[xxx], [xxx,xx,xx], xx]
for i in xxx:xxx表示一个可迭代序列或迭代器
enumerate(list, 1):给列表加序号,生成一个加了序号的列表迭代器
不可变类型:整型、字符串、元组
可变类型:列表、字典
字典:
字典是Python中唯一的映射类型,采用键值对(key-value)
的形式存储数据。
Python对key进行哈希函数云计算,根据计算的结果决定value的存储地址,
所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型
如:数字、字符串、元祖。
字典是除列表以外Python之中最灵活的内置数据结构类型。
列表是有序的对象集合,字典是无序的对象集合,两者之间的区别在于:
字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典必定是无序的,且键是唯一的(当有相同键时,后面的键会覆盖前面的键)
>>创建字典:
dict1 = {"name":"TyQuan","age":36, "gender":"male"} dict2 = dict((("name", "TyQuan"), ))(不常用) print(dict1) print(dict2)
>>字典取值:
dict1["name"] 通过key取出对应的值
字典操作:
1.增加:
>>dict1["height"] = 178
往字典dict1中增加一个名为height的键,对应的值为178
>>dict1.setdefault("weight",60)
setdefault()方法直接给定一组键值对,返回值为设置的键的值
如果给定的键本身就存在于字典中,那么返回值就是该键之前的值,并且本次键值设定不生效
如果给定的键本身不存在于字典中,那么返回值就是该键当前设置的值,本次键值设定生效
2.查询:
>>dict1["name"]
通过key直接取出对应的值
>>dict1.get("name")
通过key查询并得到对应的值
>>dict1.keys()
获取字典所有的key,返回的是一个dict_keys类型,可以通过list()转换为列表
>>dict1.values()
获取字典所有的value,返回的是一个dict_values类型,可以通过list()转换为列表
>>dict1.items()
获取字典中每一组键值对,返回一个dict_items类型,可以通过list()转换为列表
3.修改:
>>dict1["name"]="TyQuan"
直接取key修改对应的value
>>dict2={"name":"TyQuan", "age":25} >>dict1.update(dict2)
将dict2的键值对覆盖到dict1中,相同key直接被覆盖,不相同的就放入dict1字典中
4.删除:
>>del dict1["name"]
通过del删除列表中key对应的键值对
>>dict1.clear()
清空当前字典所有内容,dict1为空字典
>>dict1.pop("name")
删除字典中key为"name"对应的键值对,返回值为删除的key对应的value
>>dict1.popitem() (没什么用)
随机删除字典中的某组键值对,并返回该键值对元组
>>del dict1
删除该整个字典
5.其他操作以及涉及到的方法:
>>dict2 = dict.fromkeys(["host1", "host2", "host3"], "test") In [0]: dict2 Out[0]: {'host1': 'test', 'host2': 'test', 'host3': 'test'}
通过dict.fromkeys()方法创建一个所有key的value默认值都一致的字典
该方法有一个情况,如果默认value是一个列表时存在浅拷贝情况,修改某个key的value,全部key对应的value都会被修改
>>sorted(dict) # 默认返回排序好的key列表 >>sorted(dict.keys()) >>sorted(dict.values()) # 返回排序好的values列表 >>sorted(dict.items()) # 返回排序好的键值对元组为元素的列表(根据key排序)
返回一个有序的包含字典所有key的列表
字典的遍历:
dic5={'name': 'alex', 'age': 18} for i in dic5:# 推荐使用,效率优于第三种 print(i,dic5[i])# 此处的i得到的是key for item in dic5.items(): print(item) for keys,values in dic5.items(): print(keys,values)
字符串操作:
# 1 * 重复输出字符串
print('hello'*2)
# 2 [] ,[:] 通过索引获取字符串中字符,这里和列表的切片操作是相同的,具体内容见列表
print('helloworld'[2:])
# 3 in 成员运算符 - 如果字符串中包含给定的字符返回 True
print('el' in 'hello')
# 4 % 格式字符串
print('alex is a good teacher') print('%s is a good teacher'%'alex')
# 5 + 字符串拼接
a='123' b='abc' c='789' d1=a+b+c print(d1)
# +效率低,该用join
d2=''.join([a,b,c]) print(d2)
string的内置方法:
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.index(str, beg=0, end=len(string)) # 跟find()方法一样,只不过如果str不在 string中会报一个异常. string.isalnum() # 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False string.isalpha() # 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False 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) ) # 类似于 find()函数,不过是从右边开始查找. 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(num=string.count('\n')) # 按照行分隔,返回一个包含各行作为元素的列表,如果 num 指定则仅切片 num 个行. 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 的字符,要过滤掉的字符放到 del 参数中 string.upper() # 转换 string 中的小写字母为大写