本节内容
- 列表、元组操作
- 字符串操作
- 字典操作
- 集合操作
- 文件操作
字符编码与转码
一,列表操作
示例列表:
names = ['wuzb',"Tenglan",'Eric']
1,下标取值
下标从0开始,第n个值的下标是n-1。
可以倒着取值,比如:name[-1]>>> names[0]'wuzb'>>> names[2]'Eric'>>> names[-1]'Eric'>>> names[-2] #还可以倒着取'Tenglan'
2,切片
下标切片,取头舍尾。比如name[1:8],只会取下标是1-7的值。
如果从头开始可以不用写下标: name[:6] 如果想要取到最后一个可以:name[2:] 还可以隔几个取值:name[2::2] 表示:每隔2个值取一个值,下标从2开始到结束>>> names = ["Wuzb","Tenglan","Eric","Rain","Tom","Amy"]>>> names[1:4] #取下标1至下标4之间的数字,包括1,不包括4['Tenglan', 'Eric', 'Rain']>>> names[1:-1] #取下标1至-1的值,不包括-1['Tenglan', 'Eric', 'Rain', 'Tom']>>> names[0:3]['Alex', 'Tenglan', 'Eric']>>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样['Alex', 'Tenglan', 'Eric']>>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写['Rain', 'Tom', 'Amy']>>> names[3:-1] #这样-1就不会被包含了['Rain', 'Tom']>>> names[0::2] #后面的2是代表,每隔一个元素,就取一个['Alex', 'Eric', 'Tom']>>> names[::2] #和上句效果一样['Alex', 'Eric', 'Tom']
3,追加
方法:name.append(“值”)
自动会在列表最后追加>>> names['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']>>> names.append("我是新来的")>>> names['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
4,插入
方法:name.insert(2,"alex")
代表在name中下标为2的值后面插入一个值为alex的元素>>> names['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']>>> names.insert(2,"强行从Eric前面插入")>>> names['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
5,修改
方法:name[2] ="alex"
直接去赋值>>> names['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']>>> names[2] = "该换人了">>> names['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
6,删除
方法:name.remove["alex"] 删除指定的元素
name.pop() 删除最后的元素 del name[2] 删除指定下标的元素>>> del names[4]>>> names['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']>>>>>> names.remove("Eric") #删除指定元素>>> names['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新来的']>>> names.pop() #删除列表最后一个值'我是新来的'>>> names['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
7,扩展
方法: name.extend(b)
扩展列表name,将列表b加入到列表name中。>>> names['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']>>> b = [1,2,3]>>> names.extend(b)>>> names['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
8,拷贝
方法:names=name.copy()
代表将name列表复制一份给names。 当name改变的时候,name是不会变的>>> names['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]>>> name_copy = names.copy()>>> name_copy['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]>>> name[1, 2, 3, 4, 5, 4, 6]>>> names=name.copy()>>> names[1, 2, 3, 4, 5, 4, 6]>>> name.append(8)>>> name[1, 2, 3, 4, 5, 4, 6, 8]>>> names[1, 2, 3, 4, 5, 4, 6] #copy之后,name变了,但是names是不会变的
9,统计
方法:name.count("alex")
>>> names['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]>>> names.count("Amy")2
10,排序&反转
方法:name.sort() 3.0不同的数据类型不能放在一起排序。
反转 name.reverse() 3.0里不同数据类型不能放在一起排序了,python2可以。>>> names=[1,2,3,5,3,6,6,8,95,87]>>> names.sort()>>> names[1, 2, 3, 3, 5, 6, 6, 8, 87, 95]>>> names.reverse()>>> names[95, 87, 8, 6, 6, 5, 3, 3, 2, 1]
11,获取下标
方法:name.index("Amy") #只返回找到的第一个下标
>>> names['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']>>> names.index("Amy") 2 #只返回找到的第一个下标
二,元组操作
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表。 它只有2个方法,一个是count,一个是index,完毕 方法1:name.count("alex") 方法2:name.index("wzb")>>> name=("alex","wzb","liyuan")>>> name[1]'wzb'>>> name[1:]('wzb', 'liyuan')>>> name.count("wzb")1>>> name.index("wzb")1
三、字符串操作
3.1 基本字符串的操作(字符串是不可变的,分片赋值是不合法的)
标准的序列操作:索引、分片、乘法、判断成员资格、求长度、取最大最小值
3.1.1 索引
>>> name="brucewu">>> name[4]'e'示例:根据给定的年月日,以数字形式打印出日期
月份和日期结尾字典
months =['January','February','March','April','May','June','July','August','September', 'October','November','December']endings = ['st','nd','rd'] + 17*['th']\ + ['st','nd','rd'] + 7*['th']\ + ['st']#输入年月日year = input('year:')month = input('month(1-12):')day = input('day(1-31:')#月份和日期类型转换month_number = int(month)day_number = int(day)#月和日的取得,使用列表索引month_name = months[month_number - 1]ordinal = day + endings[day_number - 1]year:2017month(1-12):12day(1-31:22December 22nd.2017
3.1.2 分片
>>> tag="http://www.liaoxuefeng.com/">>> tag[7:]'www.liaoxuefeng.com/'>>> tag[7:-1]'www.liaoxuefeng.com'示例:分片示例url = input("Please input url:")domain = url[4:-4]print("Domain name:"+domain)Please input url:www.python.comDomain name:python
3.1.3 序列相加(同类型的才能相加)
>>> "hello"+"world"'helloworld'>>> "hello"+2Traceback (most recent call last): File "", line 1, in TypeError: Can't convert 'int' object to str implicitly
3.1.4 乘法
>>> name="wu">>> names=name*5>>> names'wuwuwuwuwu'>>> []*100[]
3.1.5 成员资格(in)
>>> url="www.python.org">>> "python" in urlTrue
3.1.6 长度,最大和最小值(len、max、min)
>>> url="www.python.org">>> len(url)14>>> max(url)'y'>>> min(url)'.'
3.2 字符串的格式化
- 格式化操作符的右侧数可以是任意类型,如果是元组或者映射类型(如字典)。那么字符串的格式化将会有所不同。
- 如果操作数是元组,其中每个元素都会被单独格式化,每个值都需要一个对应的转换说明。
基本的转换说明符。注意,这些项的顺序至关重要。
(1)%字符:转换说明符开始。
(2)转换标志(可选):- 表示左对齐;+表示要在转换值之前要加正负号;""(空白字符)表示正数前要保留空格;0 表示转换值若位数不够则用0填充。 (3)最小字段宽度(可选):转换后字符串至少应具有的指定宽度。如果是,宽度值从元组中读出。 (4)点(.)后跟精度值(可选):如果是实数,精度指的是出现在小数点后的位数。如果是字符串,该数字表示最大字段宽度。如果是,精度从元组中读出。 (5)转换类型: 格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:%s | 字符串 (采用str()的显示) |
---|---|
%r | 字符串 (采用repr()的显示) |
%c | 单个字符 |
%b | 二进制整数 |
%d | 十进制整数 |
%i | 十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数 |
%e | 指数 (基底写为e) |
%E | 指数 (基底写为E) |
%f | 浮点数 |
%F | 浮点数,与上相同 |
%g | 指数(e)或浮点数 (根据显示长度) |
%G | 指数(E)或浮点数 (根据显示长度) |
%% | 字符"%" |
3.2.1 简单转换
>>> "price of eggs:$%+d" %42'price of eggs:$+42'>>> "price of eggs:$%.5f" %42.98979797'price of eggs:$42.98980'
宽度按设置为10
>>> from math import pi>>> "%10.5f" % pi' 3.14159'
3.2.2使用对齐和0填充
>>> "%-10.5f" % pi'3.14159 '>>> "%+10.5f " % pi' +3.14159 '>>> "%+10.5f " % -pi' -3.14159 '
3.3 字符串的方法
3.3.1 查找字串:Find
返回字串所在位置最左端的索引,没有找到返回-1
url = "www.python.com"print(url.find("www"))print(url.find("python"))print(url.find("sb"))#长度超出也返回-1print(url.find("www.python.comss"))-----------------------------------04-1-1
3.3.2 连接序列中元素:join(split的逆向方法)
注意:连接元素必须是字符串
seq = ["1","2","3","4","5",]sep = "+"result = sep.join(seq)print(result)----------------------------1+2+3+4+5
3.3.3 转换小写:lower
使用场景:匹配字符串的时候区分大小写,如果想做到简洁,可以把字符串全部转换为小写来匹配
url = "WWW.Python.Com"url_low = url.lower()print(url_low.find("python"))-------------------------------4
3.3.4 替换:replace(查找并且替换)
说明:返回某字符串所有匹配项均被替换的结果
url = "WWW.Python.Com"print(url.replace("Python","python"))--------------------------------------WWW.python.Com
3.3.5 分割字符串:split
说明:将字符串分割成序列
seq = "1+2+3+4+5"print(seq.split('+'))、-----------------------['1', '2', '3', '4', '5']特别说明:不提供分割符号,默认使用空格url = "WWW Python Com"print(url.split())----------------------['WWW', 'Python', 'Com']
3.3.6 去两侧空格:strip
说明:不包括内部
url = " WWW Python Com "print(url.strip())----------------------WWW Python Com指定要去除的两侧符号:url = " !!!///****WWW &&//*Python Com *!/ "print(url.strip(' !*/'))------------------------------WWW &&//*Python Com
3.3.7 其他重要方法
name.capitalize() 首字母大写name.casefold() 大写全部变小写name.center(50,"-") 输出 '---------------------Alex Li----------------------'name.count('lex') 统计 lex出现次数name.encode() 将字符串编码成bytes格式name.endswith("Li") 判断字符串是否以 Li结尾name.startswith("Li")name.isdigit("5") #判断是否为数字name.isnumeric name.isprintablename.isspacename.istitlename.isuppername="bruce wu"if name.startswith("bruce"): print("yes")else: print("no")---------------------yes
3.3.8 替换:replace,translate,maketrans
replace: | 查找并且替换所有 |
---|---|
maketrans: | 创建一个替换表 |
translate: | 使用替换表批量处理字符串 |
intab = "aeiou" #This is the string having actual characters.outtab = "12345" #This is the string having corresponding mapping charactertrantab = str.maketrans(intab, outtab)str = "this is string example....wow!!!"print(str.translate(trantab))---------------------------------th3s 3s str3ng 2x1mpl2....w4w!!!