字符串、列表、元组的常用操作
字符串、列表、元组的常用操作
字符串
1.去除空格 strip()
s1 = ' 测试程序 ' print(s1.strip()) # 去除两端的空格, 可以用于用户输入时去掉输入 # 内容两端的多余空格,括号内的是被去除的内容,不写默认为空格 print(s1.lstrip()) # 去除左边的空格 print(s1.rstrip()) # 去除右边的空格
居中设置 center(‘占几个字符’, '代替多余空格的内容')
s = "测试" print(s.center(10, '-')) # 让字符串居中 # 结果: ----测试----
字符串中字母大小写
str1 = str.upper() print(str1) # 把字符串中的每一个单词全部转换成大写 str2 = str.lower() print(str2) str3 = str2.capitalize() print(str3) print(str.title()) # 每个单词的首字母大写 print(str.capitalize())
索引操作,可以设置步伐
str = 'This is a string' print(str[-7:-2:2]) print(str[-1:-7:-2])
替换字符串中的内容
s = "Alex is a programmer" s1 = s.replace(' ', '') print(s1) # strip只能去除掉两边的内容,无法去除中间的内容 # 但replace可以对中间的内容进行替换,‘’表示替换去除掉内容 s2 = s.replace('Alex', 'Jack') print(s2)
s3 = 'AlexAlexAlexAlexAlexAlex'
s4 = s3.replace('Alex', 'Jack', 3)
print(s4)最后的数字表示替换的个数
切片操作split(‘分界的内容,被切掉的内容’),切片后结果是有多个字符串组成的列表
Note
需要注意的是如果切片操作切到了字符串的两端,那么会形成空的字符
s5 = 'Jack_is_a_hacker_and_very_like_program' s6 = s5.split('_') print(s6) s7 = s5.split('_program') print(s7) # 结果是: ['Jack', 'is', 'a', 'hacker', 'and', 'very', 'like', 'program'] ['Jack_is_a_hacker_and_very_like', ''] # 空字符串
字符串的格式化操作
print('%s的性别是%s,年龄是%d' % (name, gender, age)) # %进行格式化,位置是固定的 李明的性别是男,年龄是19 print('{}的年龄是{},性别是{}'.format(name, age, gender)) 李明的年龄是19,性别是男 print('{2}的年龄是{0},性别是{1}'.format(age, gender, name)) 李明的年龄是19,性别是男 # 可以指定位置,format中的顺序可以随意写,但需要注意的是下标索引必须从0开始 print('%s的价格是%.2f' % (food, price)) 大米的价格是123456.21 # 保留小数点后的两位
查找操作,注意start和end后都需要加上s
s.startswith('测试') True # 查找字符串以固定内容开头 s.endswith('内容') True # 查找字符串以固定内容结尾 s = 'aaaaaaaabbbbbbbb' print(s.count('a')) 8 # 计算字符串中固定字符出现的次数 s = '12345sfljaso' print(s.find('f')) 6 # 查找字符在字符串中的具体位置 print(s.find('ccc')) -1 注意: 如果字符串中没有查找的字符,那么返回值是-1 s = '123456dafsdfgfbbbbbbbb1234' print(s.find('fgf', 4, 23)) 11 # 查找固定位置内是否存在字符, 4为起始位置,23为结束位置 print(s.index('bbbb')) 14 # 查找字符在字符串中的下标索引值 print(s.isalpha()) False # 判断字符串是否由字母组成 print(s.isalnum()) True # 判断字符串是否由字母和数字组成 print(s.isdigit()) True # 判断字符串是否由数字组成 if s.startswith('12') and s.endswith('qew'): ...if s.isalnum() and s.find('fg', 3, 15): ... print('fg在字符串内') ...else: ... print('fg不在字符串内') ...else: ... print('字符串格式不正确') # 结果是: fg在字符串内 # 综合使用
字符串的长度
s.__len__() 23 len(s) 23 # __len__()方法等同于len(), len调用的就是__len__()方法
遍历字符串中的所有内容,需要先求出中长度,根据下标索引来打印出来
'''方法一:根据索引来打印''' s = '21324354wqeretr' l = len(s) for i in range(0, l - 1): ... print(s[i]) ... # 结果是: 2、1、3、2、4、3、5、4、w、q、e、r、e、t '''直接遍历打印''' for i in s: print(s, end='#') # 结果是: 1#2#3#2#4#5#w#q#e#r#w#g#f#d#v#c# # 这里需要注意end的用法,这个用法在python3版本中才可以直接使用,python2版本不支持
列表
列表中的切片操作
list = [1, 2, 3, 4, '21345wfe', 'safewgfvsc', 12324] print(list[4][3]) # 结果是: 4 # 字符串也是可以继续索引的 print(list[2:4]) ['sfaelm', 2] list.append({'name': 'Alex'}) # 在列表末尾添加元素 list ['213sd', '1324frvgf', 'sfaelm', 2, 1, {'name': 'Alex'}] # 列表中可以包含字典元素 print(list[5]['name']) Alex # 打印字典的value print(list[::2]) ['213sd', 'sfaelm', 1]
列表的增删改查
'''添加元素''' list = ['黄渤', '史泰龙', '黄宏'] list.pop() # 删除列表末尾元素 print(list) list.append('张艺') # 列表末尾添加元素 list.insert(3, '姚明') # 在固定位置添加元素 print(list) '''迭代添加''' list.extend('马化腾') print(list) list.extend(['马云', '俞敏洪']) print(list) # 结果是: ['黄渤', '史泰龙', '张艺', '马', '化', '腾'] ['黄渤', '史泰龙', '张艺', '马', '化', '腾', '马云', '俞敏洪'] # 注意:extend中添加也是在末尾,如果只是添加一个字符串,那么字符串中的每一个字符都会被当作单个元素一次添加进去,如果以列表的形式来添加,那么列表会被当作整体添加。 ------------------ '''删除元素''' # 方式一 data = list.pop(2) print(data) print(list) 张艺 ['黄渤', '史泰龙', '马', '化', '腾', '马云', '俞敏洪'] # pop如果不加参数,默认剔除掉末尾的元素,如果添加下标索引值,则删除指定的元素,pop具有返回值,删除的元素可以赋值给变量做判断 # 方式二 list.remove('马云') print(list) ['黄渤', '史泰龙', '马', '化', '腾', '俞敏洪'] # 四种删除方式中只有remove是通过写出删除的元素来删除的 # 方式三 del list[3] print(list) ['黄渤', '史泰龙', '马', '腾', '俞敏洪'] del list[2:4] print(list) ['黄渤', '史泰龙', '俞敏洪'] # 通过下标索引来删除, 并且可以进行切片删除 # 方式四 list.clear() [ ] # 把列表元素全部删除 ------------- '''修改列表元素:过程是先删除后新增''' list = ['1234', '王者荣耀', 'sdg', 123243, '麦田的守望者', '平凡的世界', 123, {'age': 13}] list[2:4] = ['政治', '军事'] print(list) ['1234', '王者荣耀', '政治', '军事', '麦田的守望者', '平凡的世界', 123, {'age': 13}] # 通过切片来进行修改 list[1:4:2] = ['QQ', 'Wechat'] ['1234', 'QQ', '政治', 'Wechat', '麦田的守望者', '平凡的世界', 123, {'age': 13}] # 通过列表中的步伐来隔元素进行修改,注意:需要修改几个元素,列表中需要给定几个元素,否则会报错
列表的遍历
for i in list: print(i, end=' ') 1234 QQ 政治 Wechat 麦田的守望者 平凡的世界 123 {'age': 13}
列表的嵌套(将为操作)
list = [[1, 2], ['测试', '程序'], [[1, 2, 3], [3, 4, 5], [6, 7, 8]], {'name': 'Alex'}] list[2][1][0] = 1111 # 或者list[2][1][0] = list[2][1][0] + 1098 print(list) [[1, 2], ['测试', '程序'], [[1, 2, 3], [1111, 4, 5], [6, 7, 8]], {'name': 'Alex'}] # 多层嵌套使用
其他的操作
'''查询元素出现的次数,和字符串用法一致''' count = list[1].count('测试') print(count) '''列表排序''' list = [0, 20, 33, 1, 44, -1] list.sort() print(list) [-1, 0, 1, 20, 33, 44] # sort排序方式默认是升序排序 list.reverse() print(list) [44, 33, 20, 1, 0, -1] # reverse()默认为降序排序 list.sort(reverse=True) print(list) [44, 33, 20, 1, 0, -1] # 或者还继续红sort,但是添加元素reverse=True来进行降序排列
元组(不可变的列表)
基本用法:小括号包裹,如果只有一个元素,后边必须加上逗号
tuple = (3,) print(tuple) (3,) tu = () type(tu) <type 'tuple'> # 空元组
元组不支持任何修改,只能读取元素
tuple[0] 3 for i in tu: print(i) 1、2、3、4、55 # 索引和列表中的使用方法完全一样 tuple[0] = 34 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment tuple.append(2333) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'append' del tuple[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object doesn't support item deletion
虽然元组是不可变的,但是如果元素中有可变元素如列表,那么可变元素中的元素是可以修改的,但可变元素本身不能变
tuple = (1, '23', '这是字符串', []) print(tuple) tuple[3].append(1) print(tuple) tuple[3].insert(2, 3) print(tuple) # 结果是: (1, '23', '这是字符串', []) (1, '23', '这是字符串', [1]) (1, '23', '这是字符串', [1, 3])
range()用法
range()是一个可迭代的对象
range(m, n), 遍历的结果下标是从m到n-1
range(m, n, y) y表示的是步伐
for i in range(0, len(tu), 2): print(tu[i], end='、') 1、3、4、5、6
tu = [1,2,3,3,4,5,5,6,6]
for i in range(len(tu)-1, 0, -2):
print(tu[i])
6
5
4
3注意反向遍历的时候,左侧索引值必须-1, 步伐必须是负数
Note
切片操作的到的对象类型和原对象类型一致, 切片不会改变对象类型