【Python学习笔记】-字符串和字典

来源:互联网 发布:c语言爱心代码 编辑:程序博客网 时间:2024/05/29 18:38

字符串、字典

字符串

定义、操作、函数

定义

用单引号,双引号,三引号引起来的就是字符串
特殊字符:

    \:转义符    \r:回车    \n:换行    \t:tab键    \f:换页

操作

字符串是一个特殊的元组
可遍历,有索引,字符串不能修改
字符串转换函数:str()

常用方法

len()max()min()

四则运算:

加(+)、乘(*)

字符串常用函数

count 计算字符串中出现子字符串的次数index 计算字符串中出现子字符串位置,若不存在则报错find 计算字符串中出现子字符串位置,若不存在则返回-1endswith/startswith 判断字符串是否以参数结尾/开头format 格式化字符串isalnum/isalpha/isdigit/isnumeric 判断字符串是否某类型的字符串join 使用字符串连接序列lower/upper 将字符串转成小写/大写replace 替换字符串split/splitlines 分隔字符串为liststrip 去除字符串前后的空字符

字符串全部函数

字符串实现所有common序列操作,以及下面描述的附加方法。

Strings还支持两种样式的字符串格式化,一种提供大量的灵活性和定制(见str.format(),Format String Syntax和Custom String Formatting),另一个基于C printf样式格式,它处理的范围较窄,并且稍微难以正确使用,但对于可处理的情况(printf-style String Formatting)。

标准库的Text Processing Services部分包括提供各种文本相关实用程序(包括re模块中的正则表达式支持)的许多其他模块。

str.capitalize()
返回字符串的副本,该副本第一个字符大写,其余字符小写。

cstr.casefold()
返回字符串的casefolded副本。表壳式字符串可用于无盒匹配。

casefolding类似于小写,但更积极,因为它旨在删除字符串中的所有case区别。例如,德国小写字母’ß’等效于”ss”。由于它已经是小写的,lower()对’ß’不起作用; casefold()将其转换为”ss”。

表单折叠算法在Unicode标准的3.13节中描述。

版本3.3中的新功能。

str.center(width[, fillchar])
返回长度为width的字符串,并使得自身居中。填充使用指定的fillchar(默认为ASCII空格)完成。如果width小于或等于len(s)则返回原始字符串。

str.count(sub[, start[, end]])
返回在[start, end]范围内的子串sub非重叠出现的次数。可选参数start和end都以切片表示法解释。

str.encode(encoding=”utf-8”, errors=”strict”)
将字符串的编码版本作为字节对象返回。默认编码为’utf-8’。可以给出errors以设置不同的错误处理方案。errors的默认值是’strict’,意思编码错误引发一个UnicodeError。Other possible values are ‘ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ and any other name registered via codecs.register_error(), see section Error Handlers. 可能的编码列表,请参阅Standard Encodings部分。

在版本3.1中已更改:添加了对关键字参数的支持。

str.endswith(suffix[, start[, end]])
如果字符串以指定的suffix结尾则返回False,否则返回True。suffix也可以是一个元组。可选的start表示从该位置开始测试。可选的end表示在该位置停止比较。

str.expandtabs(tabsize=8)
返回一个字符串的副本,其中所有制表符由一个或多个空格替换,具体取决于当前列和给定的制表符大小。制表位位置发生每tabsize字符 (默认值为 8,给制表位位置在列 0,8,16,等等)。若要展开的字符串,当前的列被设置为零并检查字符串的字符。如果字符是制表符(\t),则在结果中插入一个或多个空格字符,直到当前列等于下一个制表符位置。(不复制制表符字符本身。)如果字符是换行符(\n)或返回(\r),则将复制该字符串,并将当前列重置为零。任何其他字符不变地复制,并且当前列增加1,而不管在打印时如何表示字符。

>>>>>> '01\t012\t0123\t01234'.expandtabs()'01      012     0123    01234'>>> '01\t012\t0123\t01234'.expandtabs(4)'01  012 0123    01234'

str.find(sub[, start[, end]])
返回在片段s[start:end]内找到子串sub的字符串中的最低索引。可选参数start和end作为切片表示法解释。如果未找到sub,则返回-1 。

注只有当你需要知道sub的位置时才应使用find()方法。若要检查sub是否一个子字符串,请使用in运算符:

>>>>>> 'Py' in 'Python'True

str.format(*args, **kwargs)
执行字符串格式化操作。调用此方法的字符串可以包含文本字面值或由花括号{}分隔的替换字段。每个替换字段包含位置参数的数字索引或关键字参数的名称。返回字符串的一个拷贝,其中每个替换字段使用对应参数的字符串值替换。

>>>>>> "The sum of 1 + 2 is {0}".format(1+2)'The sum of 1 + 2 is 3'

关于在格式字符串中可以指定的各种格式化选项的说明,请参阅Format String Syntax。

str.format_map(mapping)
类似于str.format(**mapping),除了mapping直接使用,而不复制到dict。这是有用的,例如mapping是一个dict子类:

>>>>>> class Default(dict):...     def __missing__(self, key):...         return key...>>> '{name} was born in {country}'.format_map(Default(name='Guido'))'Guido was born in country'

版本3.2中的新功能。

str.index(sub[, start[, end]])
类似find(),但未找到子字符串时引发ValueError 。

str.isalnum()
如果字符串中的所有字符都是字母数字且至少有一个字符,则返回true,否则返回false。A character c is alphanumeric if one of the following returns True: c.isalpha(), c.isdecimal(), c.isdigit(), or c.isnumeric().

str.isalpha()
如果字符串中的所有字符都是字母并且至少有一个字符,则返回true,否则返回false。字母字符是在Unicode字符数据库中被定义为“Letter”的那些字符,即具有一般类别属性是“Lm”,“Lt”,“Lu”,“Ll”或“Lo”之一的那些字符。请注意,这不同于Unicode标准中定义的“字母”属性。

str.isdecimal()
如果字符串中的所有字符都是十进制字符并且至少有一个字符,则返回true,否则返回false。十进制字符是来自通用类别“Nd”的字符。此类别包括数字字符,以及可用于形成十进制数字的所有字符。U + 0660,ARABIC-INDIC DIGIT ZERO。

str.isdigit()
如果字符串中的所有字符都是数字,并且至少有一个字符,则返回true,否则返回false。数字包括十进制字符和需要特殊处理的数字,例如兼容性上标数字。形式上,数字是具有属性值Numeric_Type = Digit或Numeric_Type = Decimal的字符。

str.isidentifier()
如果字符串是根据语言定义(Identifiers and keywords部分)的有效标识符,则返回true。

使用keyword.iskeyword()测试保留的标识符,例如def和class。

str.islower()
如果在字符串中的所有套管井的字符[4]都小写,还有套管井的至少一个字符虚假否则返回 true。

str.isnumeric()
如果字符串中的所有字符都是数字字符,并且至少有一个字符,则返回true,否则返回false。数字字符包括数字字符,以及具有Unicode数字值属性的所有字符。U + 2155,VULGAR FRACTION ONE FIFTH。正式地,数字字符是具有属性值Numeric_Type = Digit,Numeric_Type = Decimal或Numeric_Type = Numeric的那些。

str.isprintable()
如果字符串中的所有字符都可打印或字符串为空,则返回true,否则返回false。不可打印字符是在Unicode字符数据库中定义为“其他”或“分隔符”的字符,除了被认为是可打印的ASCII空间(0x20)。(请注意,在此上下文中的可打印字符是在字符串上调用repr()时不应转义的字符。它对处理写入sys.stdout或sys.stderr的字符串没有影响。

str.isspace()
如果字符串中只有空格字符,并且至少有一个字符,则返回true,否则返回false。空格字符是在Unicode字符数据库中定义为“其他”或“分隔符”并且具有双向属性是“WS”,“B”或“S”之一的那些字符。

str.istitle()
如果字符串是标题类型的字符串且至少包含一个字符,则返回 true。例如:大写字符可能只能跟着非标题类(数字、符号和转义字符)的字符和小写字符。 否则返回 false。

str.isupper()
如果所有嵌套中的字符[4]在字符串中都大写,并且嵌套中的至少一个字符,则返回 true;否则返回false。

str.join(iterable)
返回一个字符串,为iterable可迭代对象中字符串的连接。如果可迭代中有任何非字符串值,包括bytes对象,则会引发TypeError。元素之间的分隔符是提供该方法的字符串。

str.ljust(width[, fillchar])
返回字符串的长度宽度中左对齐一个字符串。填充使用指定的fillchar(默认为ASCII空格)完成。如果width小于或等于len(s)则返回原始字符串。

str.lower()
返回转换为小写字符串的所有套管井的字符[4]的副本。

使用的小写算法在Unicode标准的第3.13节中描述。

str.lstrip([chars])
返回删除前导字符的字符串的副本。Chars参数是一个字符串,指定要移除的字符集。如果省略或None chars参数默认为删除空格。chars参数不是前缀;相反,它的值的所有组合被去除:

>>>>>> '   spacious   '.lstrip()'spacious   '>>> 'www.example.com'.lstrip('cmowz.')'example.com'static str.maketrans(x[, y[, z]])

此静态方法返回可用于str.translate()的转换表。

如果只有一个参数,它必须是将Unicode ordinals(整数)或字符(长度为1的字符串)映射到Unicode ordinal,字符串(任意长度)或None的字典。字符键将被转换为序数。

如果有两个参数,它们必须是相等长度的字符串,并且在结果字典中,x中的每个字符将被映射到y中相同位置的字符。如果有第三个参数,它必须是一个字符串,其字符将被映射到结果中的无。

str.partition(sep)
在分隔符首次出现位置拆分字符串,并返回包含分隔符之前部分、分隔符本身和分隔符之后部分的3元组。如果找不到分隔符,返回包含字符串本身,跟着两个空字符串的 3 元组。

str.replace(old, new[, count])
返回字符串的一个拷贝,其中所有的子串old通过new替换。如果指定了可选参数count,则只有前面的count个出现被替换。

str.rfind(sub[, start[, end]])
返回被搜索子串最后一次出现在字符串的索引位置, s[start:end]被搜索范围为[start:end]可选参数start和end作为切片表示法解释。失败返回-1 。

str.rindex(sub[, start[, end]])
类似rfind() ,但未找到子字符串子时引发ValueError 。

str.rjust(width[, fillchar])
返回字符串的长度宽度中右对齐的字符串。填充使用指定的fillchar(默认为ASCII空格)完成。如果width小于或等于len(s)则返回原始字符串。

str.rpartition(sep)
拆分 ( sep),最后一个匹配项的字符串,并返回包含分隔符,分隔符本身和部分之前的部分在分隔符之后的 3 元组。如果找不到分隔符,返回包含两个空字符串,后面跟有字符串本身的 3 元组。

str.rsplit(sep=None, maxsplit=-1)
在字符串中,使用sep作为分隔符字符串返回一个单词列表。如果给出了maxsplit ,顶多分裂为maxsplit+1个元素,从最右边开始。如果未指定sep或None任何空格的字符串是一个分隔符。除了从右边分裂, rsplit()像split()在下面详细描述。

str.rstrip([chars])
返回一个移去尾部字符后的字符串的拷贝。Chars参数是一个字符串,指定要移除的字符集。如果省略或None chars参数默认为删除空格。chars参数不是后缀;相反,它的值的所有组合被去除:

>>>>>> '   spacious   '.rstrip()'   spacious'>>> 'mississippi'.rstrip('ipz')'mississ'str.split(sep=None, maxsplit=-1)

在字符串中,使用sep作为分隔符分割字符串,返回分割后的列表。如果给出maxsplit,则至多拆分maxsplit次(因此,列表中将最多有maxsplit+1个元素)。如果没有指定maxsplit或为-1,那么分割的数量没有限制(进行所有可能的分割)。

如果给定了sep,连续的分隔符不分组在一起,并被视为空字符串进行分隔(例如,’1,,2’.split(‘,’)返回[‘1’, ”, ‘2’])。sep参数可以由多个字符组成(例如,’1<>2<>3’.split(‘<>’)返回[‘1’, ‘2’, ‘3’])。用指定的分隔符分隔空字符串返回[”]。

举个例子:

>>>>>> '1,2,3'.split(',')['1', '2', '3']>>> '1,2,3'.split(',', maxsplit=1)['1', '2,3']>>> '1,2,,3,'.split(',')['1', '2', '', '3', '']

如果sep未指定或者为None,则采用一种不同的分隔算法:连续的空格被视为一个单一的分隔符,结果的开始或结尾将不包含空字符串即使该字符串有前导或尾随空白。因此,使用None分隔一个空字符串或只包含空白的字符串返回[]。

举个例子:

>>>>>> '1 2 3'.split()['1', '2', '3']>>> '1 2 3'.split(maxsplit=1)['1', '2 3']>>> '   1   2   3   '.split()['1', '2', '3']

str.splitlines([keepends])
返回字符串中行组成的列表,在行的边界截断。换行符不包含在结果列表中,除非给定keepends给定且为真。

此方法在以下行边界上分割。特别地,边界是universal newlines的超集。

表示  说明\n      换行\r      回车\r\n    回车+换行\v\x0b 线制表\f\x0c 表单Feed\x1c    文件分隔符\x1d    组分隔符\x1e    记录分隔符\x85    下一行(C1控制代码)\u2028  行分隔符\u2029  段落分隔符

在版本3.2中更改: \v和\f添加到行边界列表。

举个例子:

>>>>>> 'ab c\n\nde fg\rkl\r\n'.splitlines()['ab c', '', 'de fg', 'kl']>>> 'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True)['ab c\n', '\n', 'de fg\r', 'kl\r\n']

与给定分隔符字符串sep时split()不同,此方法为空字符串返回一个空列表,终端换行符不会产生额外的行:

>>>>>> "".splitlines()[]>>> "One line\n".splitlines()['One line']

为了比较,split(‘\n’)给出:

>>>>>> ''.split('\n')['']>>> 'Two lines\n'.split('\n')['Two lines', '']str.startswith(prefix[, start[, end]])

如果字符串以prefix开头则返回True,否则返回False。prefix也可以是一个需要查找的前缀元组。可选的start表示从该位置开始测试字符串。可选的end表示在该位置停止字符串比较。

str.strip([chars])
返回字符串的一个副本,删除前导和尾随字符。Chars参数是一个字符串,指定要移除的字符集。如果省略或None chars参数默认为删除空格。chars参数不是前缀或后缀;相反,它的值的所有组合被去除:

>>>>>> '   spacious   '.strip()'spacious'>>> 'www.example.com'.strip('cmowz.')'example'

从字符串中剥离最外面的前导和尾随的chars参数值。从前端删除字符,直到到达未包含在chars中的字符集中的字符串字符。类似的动作发生在尾端。举个例子:

>>>>>> comment_string = '#....... Section 3.2.1 Issue #32 .......'>>> comment_string.strip('.#! ')'Section 3.2.1 Issue #32'

str.swapcase()
返回大写字符的字符串的副本转换为小写,反之亦然。请注意,s.swapcase().swapcase() == s不一定是真的。

str.title()
返回字符串首字母大写的一个版本,所有单词以大写字母开始,剩下的字母都是小写。

举个例子:

>>>>>> 'Hello world'.title()'Hello World'

该算法使用一个简单的独立于具体语言的定义,将连续的一组字母定义为一个单词。该定义在很多情况下可以工作,但也意味着在缩略和所有格构成词的边界中,这可能不是预期的结果:

>>>>>> "they're bill's friends from the UK".title()"They'Re Bill'S Friends From The Uk"

可以使用正则表达式为撇号构造一种变通方法:

>>>>>> import re>>> def titlecase(s):...     return re.sub(r"[A-Za-z]+('[A-Za-z]+)?",...                   lambda mo: mo.group(0)[0].upper() +...                              mo.group(0)[1:].lower(),...                   s)...>>> titlecase("they're bill's friends.")"They're Bill's Friends."

str.translate(table)
返回通过给定的翻译表映射每个字符的字符串的副本。该表必须是通过getitem()(通常为mapping或sequence)实现索引的对象。当使用Unicode序号(整数)索引时,表对象可以执行以下任何操作:返回Unicode序号或字符串,将字符映射到一个或多个其他字符; return None,从返回字符串中删除字符;或引发LookupError异常,将字符映射到自身。

您可以使用str.maketrans()从不同格式的字符到字符映射创建转换映射。

另请参阅codecs模块,以获得自定义字符映射的更灵活的方法。

str.upper()
返回字符串的一个拷贝,其中所有大小写有区别的字符[4]转换为大写。请注意,str.upper().isupper()可能是False如果s包含未包含字符, s)不是“Lu”(Letter,大写),而是eg“Lt”(Letter,titlecase)。

所使用的上层算法在Unicode标准的3.13节中描述。

str.zfill(width)
返回剩余字符串为ASCII ‘0’的字符串,以生成长度宽度的字符串。A leading sign prefix (‘+’/’-‘) is handled by inserting the padding after the sign character rather than before. 如果width小于或等于len(s)则返回原始字符串。

举个例子:

>>>>>> "42".zfill(5)'00042'>>> "-42".zfill(5)'-0042'

字典

定义

使用大括号{}包含
键:值对的形式存在
无序
使用逗号分隔
可循环
key为不可变对象

和列表的比较:
dict:
查找和插入的速度极快,不会随着key的增加而变慢
需要占用大量的内存,内存浪费多
list:
查找和插入的时间随着元素的增多而增加
占用空间小,浪费内存很少
所以,dict是用空间来换时间的一种方法

Key必须为不可变数据类型
数字
整数
浮点数
字符串
布尔类型
元组
子元素必须也不可变 (“a”, “b”)

列表 X
(“a”, [“b“]) X
字典 X

关于dict根据key查找速度快的理解:
dict根据key来计算value的存储位置,此算法称为hash算法。如果key值可以更改的话,那么每次计算的结果就不会相同了!谨记一点:* key必须是不可变对象 *

操作

字典的转换
dict():可以通过函数dict将其他可遍历的类型转化为字典
参数: 将每个元素的两个子元素的序列组成的序列
结果:序列中的每个元素是字典的一个元素,子序列中第一个元素为key,第二个元素为value

>>> m=[('name','aa'),('age',22)]>>> m[('name', 'aa'), ('age', 22)]>>> n=dict(m)>>> n{'name': 'aa', 'age': 22}>>> 

获取字典元素的数量
len(n)
获取字典中最大值、最小值
max(n)、min(n)
判读元素是否在dictz中
‘name’ in n

常用函数

clear():清空字dict中的元素
copy():复制dict中的所有元素到新dict中并返回
fromkeys():根据序列生成dict,序列中的所有元素座位key
get():返回dict中key对应的值,若key不存在则返回默认值
items():将dict转化为由多个键值组成的,两个子元素的元组
keys():返回dict中所有的key组成的dict_keys
pop():通过key弹出字典中的元素,如果没有默认值,当key不存在时会报错,否则返回默认值
popitem():弹出并返回一个元组(key,value),当dict为空时报错
setdefault():设置dict中key的默认值(若key不存在则设置)并返回dict中key的当前值。根据key获取值,若不存在则添加
update():通过dict批量更新或添加dict中的值

dict = {'Name': 'Zara', 'Age': 7}dict2 = {'Sex': 'female' }dict.update(dict2)

values():返回dict中所有value组成的dict_values

0 0