1.列表
1.1 列表的定义
列表是有序集合,没有固定大小,能够保存任意数量任意类型的 Python 对象,语法为 [元素1, 元素2, …, 元素n]。
- 关键点是「中括号 []」和「逗号 ,」
- 中括号 把所有元素绑在一起
- 逗号 将每个元素一一分开
1.2 列表的创建
- 创建一个普通列表
a=['x1','x2','x3','x4']
print(a,type(a))
['x1', 'x2', 'x3', 'x4'] <class 'list'>
a=[12,24,36,48]
print(a,type(a))
[12, 24, 36, 48] <class 'list'>
- 利用
range()
创建列表
a=list(range(10))
print(a,type(a))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'>
a=list(range(10,1,-1))
print(a,type(a))
[10, 9, 8, 7, 6, 5, 4, 3, 2] <class 'list'>
- 利用推导式创建列表
a=[0]*10
print(a,type(a))
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] <class 'list'>
a=[0 for i in range(10)]
print(a,type(a))
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] <class 'list'>
a=[i for i in range(10)]
print(a,type(a))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'>
a=list(range(10))
print(a,type(a))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'>
a=[i**2 for i in range(1,11,2)]
print(a,type(a))
[1, 9, 25, 49, 81] <class 'list'>
a=[i for i in range(100,200) if i%2!=0 and i%3==0]
print(a,type(a))
[105, 111, 117, 123, 129, 135, 141, 147, 153, 159, 165, 171, 177, 183, 189, 195] <class 'list'>
- 创建一个4*3的二维数组
a=[[1,2,3],[4,5,6],[7,8,9],[0,0,0]]
print(a,type(a))
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [0, 0, 0]] <class 'list'>
a=[[1,2,3],[4,5,6],[7,8,9],[0,0,0]]
print(a,type(a))
for i in a:
print(i,type(i))
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [0, 0, 0]] <class 'list'>
[1, 2, 3] <class 'list'>
[4, 5, 6] <class 'list'>
[7, 8, 9] <class 'list'>
[0, 0, 0] <class 'list'>
a=[[0 for i in range(3)] for j in range(4)]
print(a,type(a))
a[0][0]=1
print(a,type(a))
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>
[[1, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>
a=[[0]*3 for i in range(4)]
print(a,type(a))
a[1][1]=4
print(a,type(a))
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>
[[0, 0, 0], [0, 4, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>
注意:
由于list的元素可以是任何对象,因此列表中所保存的是对象的指针。即使保存一个简单的[1,2,3],也有3个指针和3个整数对象。
x = [a] * 4操作中,只是创建4个指向list的引用,所以一旦a改变,x中4个a也会随之改变。
a=[[0]*3]*4
print(a,type(a))
a[0][0]=4
print(a,type(a))
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] <class 'list'>
[[4, 0, 0], [4, 0, 0], [4, 0, 0], [4, 0, 0]] <class 'list'>
- 创建一个混合列表
a=['aq',1,[1,2,3],9.05]
print(a,type(a))
['aq', 1, [1, 2, 3], 9.05] <class 'list'>
- 创建一个空列表
a=list()
print(a,type(a))
b=[]
print(b,type(b))
[] <class 'list'>
[] <class 'list'>
列表不像元组,列表内容可更改 (mutable),因此附加 (append, extend)、插入 (insert)、删除 (remove, pop) 这些操作都可以用在它身上。
1.3 向列表中添加元素
- list.append(obj) 在列表末尾添加新的对象,只接受一个参数,参数可以是任何数据类型,被追加的元素在 list 中保持着原结构类型。
a=[1,2,3,4]
print(a,type(a))
a.append(5)
print(a,type(a))
print(len(a))
[1, 2, 3, 4] <class 'list'>
[1, 2, 3, 4, 5] <class 'list'>
5
此元素如果是一个 list,那么这个 list 将作为一个整体进行追加,注意append()和extend()的区别。
a=[1,2,3,4]
a.append(['qwe','rty'])
print(a,len(a))
[1, 2, 3, 4, ['qwe', 'rty']] 5
- list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表).
严格来说 append 是追加,把一个东西整体添加在列表后,而 extend 是扩展,把一个东西里的所有元素添加在列表后。
a=[1,2,3,4]
a.extend(['qwe','rty'])
print(a)
print(len(a))
[1, 2, 3, 4, 'qwe', 'rty']
6
- list.insert(index, obj) 在编号 index 位置插入 obj
a=[1,2,3,4]
a.insert(2,100)
print(a)
[1, 2, 100, 3, 4]
1.4 删除列表中的元素
- list.remove(obj) 移除列表中某个值的第一个匹配项
a=[1,2,3,4,1,2]
a.remove(2)
print(a)
[1, 3, 4, 1, 2]
- list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
a=[1,2,3,4,1,2]
b=a.pop()
print(a)
print(b)
c=a.pop(-1)
print(c)
[1, 2, 3, 4, 1]
2
1
remove 和 pop 都可以删除元素,前者是指定具体要删除的元素,后者是指定一个索引。
- del var1[, var2 ……] 删除单个或多个对象
a=[1,2,3,4]
del a[0:2]
print(a)
[3, 4]
如果知道要删除的元素在列表中的位置,可使用del语句。
如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能继续使用它,就使用方法pop()。
1.5 获取列表中的元素
- 通过元素的索引值,从列表获取单个元素,注意,列表索引值是从0开始的。
- 通过将索引指定为-1,可让Python返回最后一个列表元素,索引 -2 返回倒数第二个列表元素,以此类推。
a=[1,2,3,4,5]
print(a[1])
print(a[-1])
2
5
切片的通用写法是 start : stop : step
a=[1,2,3,4,5]
print(a[1:])
print(a[1:3])
print(a[:3])
print(a[::2])
print(a[::-1])
print(a[1::2])
print(a[:])
[2, 3, 4, 5]
[2, 3]
[1, 2, 3]
[1, 3, 5]
[5, 4, 3, 2, 1]
[2, 4]
[1, 2, 3, 4, 5]
浅拷贝与深拷贝
a=[1,2,3,4,5,4,3,2,1]
b=a[:]
c=a
print(b)
print(c)
a.sort()
print(b)
print(c)
a=[[1,2,3],[4,5,2]]
b=a[:]
c=a
print(b)
print(c)
a[0][0]=100
print(b)
print(c)
[1, 2, 3, 4, 5, 4, 3, 2, 1]
[1, 2, 3, 4, 5, 4, 3, 2, 1]
[1, 2, 3, 4, 5, 4, 3, 2, 1]
[1, 1, 2, 2, 3, 3, 4, 4, 5]
[[1, 2, 3], [4, 5, 2]]
[[1, 2, 3], [4, 5, 2]]
[[100, 2, 3], [4, 5, 2]]
[[100, 2, 3], [4, 5, 2]]
1.6 列表的常用操作符
- 等号操作符:==
- 连接操作符 +
- 重复操作符 *
- 成员关系操作符 in、not in
「等号 ==」,只有成员、成员位置都相同时才返回True。
列表拼接有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。
a=[1,2,3]
b=[3,2,1]
c=[1,2,3]
print(a==b)
print(a==c)
print(a+b)
print(a*3)
print(1 in a)
print(1 not in a)
False
True
[1, 2, 3, 3, 2, 1]
[1, 2, 3, 1, 2, 3, 1, 2, 3]
True
False
前面三种方法(append, extend, insert)可对列表增加元素,它们没有返回值,是直接修改了原数据对象。 而将两个list相加,需要创建新的 list 对象,从而需要消耗额外的内存,特别是当 list 较大时,尽量不要使用 “+” 来添加list。
1.7 列表的其他方法
- list.count(obj) 统计某个元素在列表中出现的次数
a=[1,2,3,4,3,2,1]
print(a.count(1))
2
- list.index(x[, start[, end]]) 从列表中找出某个值第一个匹配项的索引位置
a=[1,2,3,4,5,4,3,2,1]
b=a.index(1)
print(b)
c=a.index(1,3)
print(c)
d=a.index(4,2,5)
print(d)
0
8
3
list.reverse() 反向列表中元素
a=[123,456,789]
a.reverse()
print(a)
[789, 456, 123]
list.sort(key=None, reverse=False) 对原列表进行排序。
- key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
- 该方法没有返回值,但是会对列表的对象进行排序。
a=[123,456,765,132]
a.sort()
print(a)
a.sort(reverse=True)
print(a)
[123, 132, 456, 765]
[765, 456, 132, 123]
练习题:
1、列表操作练习
列表lst 内容如下
lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]
请写程序完成下列操作:
- 在列表的末尾增加元素15
- 在列表的中间位置插入元素20
- 将列表[2, 5, 6]合并到lst中
- 移除列表中索引为3的元素
- 翻转列表里的所有元素
- 对列表里的元素进行排序,从小到大一次,从大到小一次
lst=[2,5,6,7,8,9,2,9,9]
lst.append(15)
print(lst)
lst=[2,5,6,7,8,9,2,9,9]
lst.insert(len(lst)//2,20)
print(lst)
lst=[2,5,6,7,8,9,2,9,9]
lst.append([2,5,6])
print(lst)
lst=[2,5,6,7,8,9,2,9,9]
lst.pop(3)
print(lst)
lst=[2,5,6,7,8,9,2,9,9]
lst.reverse()
print(lst)
lst=[2,5,6,7,8,9,2,9,9]
lst.sort()
print(lst)
lst=[2,5,6,7,8,9,2,9,9]
lst.sort(reverse=True)
print(lst)
[2, 5, 6, 7, 8, 9, 2, 9, 9, 15]
[2, 5, 6, 7, 20, 8, 9, 2, 9, 9]
[2, 5, 6, 7, 8, 9, 2, 9, 9, [2, 5, 6]]
[2, 5, 6, 8, 9, 2, 9, 9]
[9, 9, 2, 9, 8, 7, 6, 5, 2]
[2, 2, 5, 6, 7, 8, 9, 9, 9]
[9, 9, 9, 8, 7, 6, 5, 2, 2]
2、修改列表
问题描述:
lst = [1, [4, 6], True]
请将列表里所有数字修改成原来的两倍
lst=[1,[4,6],True]
lst2=[]
for i in lst:
if isinstance(i,bool):
lst2.append(i)
elif isinstance(i,(int,float)):
lst2.append(i*2)
elif isinstance(i,(list,tuple,dict,set)):
lst2.append([j*2 for j in i])
else:
lst2.append(i)
print(lst2)
[2, [8, 12], True]
3、leetcode 852题 山脉数组的峰顶索引
如果一个数组k符合下面两个属性,则称之为山脉数组
- 数组的长度大于等于3
- 存在 i i i, i i i >0 且 i < len ( k ) − 1 i<\operatorname{len}(k)-1 i<len(k)−1,使得 k [ 0 ] < k [ 1 ] < … < k [ i − 1 ] < k [ j ] > k [ i + 1 ] … > k [ len ( k ) − 1 ] \mathrm{k}[0]<\mathrm{k}[1]<\ldots<\mathrm{k}[\mathrm{i}-1]<\mathrm{k}[\mathrm{j}]>\mathrm{k}[\mathrm{i}+1] \ldots>\mathrm{k}[\operatorname{len}(\mathrm{k})-1] k[0]<k[1]<…<k[i−1]<k[j]>k[i+1]…>k[len(k)−1]
这个 i i i就是顶峰索引。
现在,给定一个山脉数组,求顶峰索引。
示例:
输入:[1, 3, 4, 5, 3]
输出:True
输入:[1, 2, 4, 6, 4, 5]
输出:False
a=[1,3,4,5,3,3]
amax=max(a)
indexmax=a.index(amax)
#print(indexmax)
a1=a[:indexmax]
a2=a[indexmax:]
#print(a1)
#print(a2)
a1.sort()
a2.sort(reverse=True)
b=a1+a2
#print(a)
#print(b)
if len(a)>3 and indexmax>0 and indexmax<len(a)-1 and a==b:
print(True)
print('顶峰索引是:',indexmax)
else:
print(False)
True
顶峰索引是: 3
2. 元组
「元组」定义语法为: (元素1, 元素2, …, 元素n)
- 小括号把所有元素绑在一起
- 逗号将每个元素一一分开
2.1 创建和访问一个元组
- Python 的元组与列表类似,不同之处在于tuple被创建后就不能对其进行修改,类似字符串。
- 元组使用小括号,列表使用方括号。
- 元组与列表类似,也用整数来对它进行索引 (indexing) 和切片 (slicing)。
a=(1,2,3,4)
print(a,type(a))
b=1,2,3,4
print(b,type(b))
(1, 2, 3, 4) <class 'tuple'>
(1, 2, 3, 4) <class 'tuple'>
a=(1,2,3,4)
print(a[1])
print(a[1:3])
print(a[-1])
print(a[::2])
print(a[:])
2
(2, 3)
4
(1, 3)
(1, 2, 3, 4)
- 创建元组可以用小括号 (),也可以什么都不用,为了可读性,建议还是用 ()。
- 元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。
a=(8)
print(a,type(a))
a=(8,)
print(a,type(a))
8 <class 'int'>
(8,) <class 'tuple'>
a=[]
print(a,type(a))
b=()
print(b,type(b))
[] <class 'list'>
() <class 'tuple'>
print(8*(8))
print(8*(8,))
64
(8, 8, 8, 8, 8, 8, 8, 8)
a=((1,2,3),(4,3,2))
print(a)
print(a[0])
print(a[0][0])
print(a[0][1:2])
((1, 2, 3), (4, 3, 2))
(1, 2, 3)
1
(2,)
2.2 更新和删除一个元组
元组有不可更改 (immutable) 的性质,因此不能直接给元组的元素赋值,但是只要元组中的元素可更改 (mutable),那么我们可以直接更改其元素,注意这跟赋值其元素不同。
a=(1,2,3,5)
a.pop()
print(a)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-8-b7240c90e0d5> in <module>
1 a=(1,2,3,5)
----> 2 a.pop()
3 print(a)
AttributeError: 'tuple' object has no attribute 'pop'
a=(1,2,3,4)
a.append(5)
print(a)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-9-032c8b1db7d5> in <module>
1 a=(1,2,3,4)
----> 2 a.append(5)
3 print(a)
AttributeError: 'tuple' object has no attribute 'append'
a=(1,2,3,4)
a2=a[:2]+(5,)+a[2:]
print(a2)
(1, 2, 5, 3, 4)
a=(1,2,3,[4,5,6])
a[3][0]=100
print(a)
del a
print(a)
(1, 2, 3, [100, 5, 6])
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-15-16c5af1e3046> in <module>
3 print(a)
4 del a
----> 5 print(a)
NameError: name 'a' is not defined
2.3 元组相关的操作符
- 等号操作符:==
- 连接操作符 +
- 重复操作符 *
- 成员关系操作符 in、not in
「等号 ==」,只有成员、成员位置都相同时才返回True。
元组拼接有两种方式,用「加号 +」和「乘号 *」,前者首尾拼接,后者复制拼接。
a1=(1,2,3,4)
a2=(1,4,3,2)
a3=(1,2,3,4)
print(a1==a2)
print(a1==a3)
print(a1+a2)
print(a1*3)
print(1 in a1)
print(2 not in a1)
False
True
(1, 2, 3, 4, 1, 4, 3, 2)
(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4)
True
False
2.4 内置方法
元组大小和内容都不可更改,因此只有 count 和 index 两种方法。
a=(1,2,3,3,4)
print(a.count(3))
print(a.index(4))
print(a.index(3,3))
2
4
3
2.5 解压元组
a=(1,2,3,4)
(a1,a2,a3,a4)=a
print(a1,a2,a3,a4)
a=(1,2,[3,6],'wer')
print(a)
(a1,a2,[a3,a4],a5)=a
print(a1,a2,a3,a4,a5)
(a1,*aa,a2,a3)=a
print(a1,a2,a3)
print(aa)
(a1,*_,a2)=a
print(a1,a2)
(_,a1,_,a2)=a
print(a1,a2)
1 2 3 4
(1, 2, [3, 6], 'wer')
1 2 3 6 wer
1 [3, 6] wer
[2]
1 wer
2 wer
练习题:
- 1、元组概念
写出下面代码的执行结果和最终结果的类型
a=(1,2)*2
b=(1,2,1,2)
print(a==b)
a=(1,)*2
b=(1,1)
print(a==b)
a=(1)*2
print(a==2)
True
True
True
- 2.拆包过程是什么?
a,b=1,2
上述过程属于拆包吗?
可迭代对象拆包时,怎么赋值给占位符?
答:拆包就是把元组中的元素都解压出来,分别赋值给不同变量
a,b=1,2 属于拆包。
可迭代对象拆包时,可采用*name
、*_
赋值给占位符
3. 字符串
3.1 字符串的定义
- Python 中字符串被定义为引号之间的字符集合。
- Python 支持使用成对的 单引号 或 双引号。
import sys
sys.version
'3.7.6 (default, Jan 8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]'
str1='I love Python!'
print(str1,type(str1))
str1="I love Python!"
print(str1,type(str1))
print(3+5)
print('3'+"5")
I love Python! <class 'str'>
I love Python! <class 'str'>
8
35
- python的常用转义字符
\\
反斜杠符号
\'
单引号
\"
双引号
\n
换行
\t
横向制表符(TAB)
\r
回车
str1='I\'ve a big apple!'
print(str1)
str1="I've a big apple!"
print(str1)
str1=r'I have a big apple\pear!'
print(str1)
I've a big apple!
I've a big apple!
I have a big apple\pear!
str1='''今天是个好天气!
心想的事儿“都能成!”
今天是个\'20200727\'
今天是个'20200727'
都能\n成!
对的(\t)
对的对的(\t\t)
'''
print(str1)
今天是个好天气!
心想的事儿“都能成!”
今天是个'20200727'
今天是个'20200727'
都能
成!
对的( )
对的对的( )
3.2 字符串的切片与拼接
- 类似于元组具有不可修改性
- 从 0 开始 (和 Java 一样)
- 切片通常写成 start:end 这种形式,包括「start 索引」对应的元素,不包括「end索引」对应的元素。
- 索引值可正可负,正索引从 0 开始,从左往右;负索引从 -1 开始,从右往左。使用负数索引时,会从最后一个元素开始计数。最后一个元素的位置编号是 -1。
str1='I love Python!'
print(str1[3])
print(str1[0:2])
print(str1[3:])
print(str1[-1])
print(str1[:5]+'YES'+str1[5:])
print(str1[::-1])
o
I
ove Python!
!
I lovYESe Python!
!nohtyP evol I
3.3 字符串的常用内置方法
- capitalize() 将字符串的第一个字符转换为大写。
- lower() 转换字符串中所有大写字符为小写。
- upper() 转换字符串中的小写字母为大写。
- swapcase() 将字符串中大写转换为小写,小写转换为大写。
str1="I love Python!"
print(str1[2:].capitalize())
print(str1.upper())
print(str1.lower())
print(str1.swapcase())
Love python!
I LOVE PYTHON!
i love python!
i LOVE pYTHON!
- count(str, beg= 0,end=len(string)) 返回str在 string 里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数。
str1="I love Python!"
print(str1.count('o'))
print(str1.count('o',4,10))
print(str1.count('o',7))
2
0
1
- endswith(suffix, beg=0, end=len(string)) 检查字符串是否以指定子字符串 suffix 结束,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。
- startswith(substr, beg=0,end=len(string)) 检查字符串是否以指定子字符串 substr 开头,如果是,返回 True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。
str1="I love Python!"
print(str1.startswith('I'))
print(str1.endswith('ve python!'))
True
False
- find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 beg 和 end,则检查是否包含在指定范围内,如果包含,返回开始的索引值,否则返回 -1。
- rfind(str, beg=0,end=len(string)) 类似于 find() 函数,不过是从右边开始查找。
str1="I love Python!"
print(str1.find("ve"))
print(str1.find("o"))
print(str1.rfind("o"))
print(str1.find("w"))
4
3
11
-1
- isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False。
str2="1,2,3,4"
str3="1 2 3 4"
str4="34567"
print(str2.isnumeric())
print(str3.isnumeric())
print(str4.isnumeric())
False
False
True
- ljust(width[, fillchar])返回一个原字符串左对齐,并使用fillchar(默认空格)填充至长度width的新字符串。
- rjust(width[, fillchar])返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度width的新字符串。
str1="you me"
print(str1.ljust(10))
print(str1.ljust(10,'0'))
print(str1.rjust(10))
print(str1.rjust(10,'0'))
you me
you me0000
you me
0000you me
- lstrip([chars]) 截掉字符串左边的空格或指定字符。
- rstrip([chars]) 删除字符串末尾的空格或指定字符。
- strip([chars]) 在字符串上执行lstrip()和rstrip()。
str1=" I love Python! "
print(str1.lstrip())
print(str1.rstrip())
print(str1.strip())
print(str1.lstrip().rstrip())
print(str1[:8].strip().strip('e'))
I love Python!
I love Python!
I love Python!
I love Python!
I lov
- partition(sub) 找到子字符串sub,把字符串分为一个三元组(pre_sub,sub,fol_sub),如果字符串中不包含sub则返回(‘原字符串’,’’,’’)。
- rpartition(sub)类似于partition()方法,不过是从右边开始查找。
str1=" I love Python! "
print(str1.strip().partition(' '))
print(str1.strip().rpartition(" "))
('I', ' ', 'love Python!')
('I love', ' ', 'Python!')
- replace(old, new [, max]) 把 将字符串中的old替换成new,如果max指定,则替换不超过max次。
str1=" I love Python! "
print(str1.replace("o","x"))
I lxve Pythxn!
- split(str="", num) 不带参数默认是以空格为分隔符切片字符串,如果num参数有设置,则仅分隔num个子字符串,返回切片后的子字符串拼接的列表。
str1="I love Python!"
print(str1.split())
print(str1.split("o"))
['I', 'love', 'Python!']
['I l', 've Pyth', 'n!']
str1='''I
love
python
'''
print(str1)
print(str1.split())
print(str1.split("\n"))
I
love
python
['I', 'love', 'python']
['I', 'love', 'python', '']
- splitlines([keepends]) 按照行(’\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数keepends为 False,不包含换行符,如果为 True,则保留换行符。
str1="I \n love love \n Python"
print(str1.splitlines())
print(str1.splitlines(True))
['I ', ' love love ', ' Python']
['I \n', ' love love \n', ' Python']
- maketrans(intab, outtab) 创建字符映射的转换表,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
- translate(table, deletechars="") 根据参数table给出的表,转换字符串的字符,要过滤掉的字符放到deletechars参数中。
str1="I love Python Python3.0 www"
a="aeiop"
b="12345"
c=str1.maketrans(a,b)
print(c)
print(str1.translate(c))
{97: 49, 101: 50, 105: 51, 111: 52, 112: 53}
I l4v2 Pyth4n Pyth4n3.0 www
3.4 字符串格式化
format
格式化函数
str1="{0} love {1}".format("I","Python") # 位置参数
print(str1)
str2="{a} love {b}".format(a="I",b="Python")# 关键字参数
print(str2)
str3="{a} love {0}".format("Python",a="I")# 位置参数要在关键字参数之前
print(str3)
str4="{0:.2f}{1}".format(23.4567,"GB")# 保留小数点后两位
print(str4)
I love Python
I love Python
I love Python
23.46GB
- Python 字符串格式化符号
- %c 格式化字符及其ASCII码
- %s 格式化字符串,用str()方法处理对象
- %r 格式化字符串,用rper()方法处理对象
- %d 格式化整数
- %o 格式化无符号八进制数
- %x 格式化无符号十六进制数
- %X 格式化无符号十六进制数(大写)
- %f 格式化浮点数字,可指定小数点后的精度
- %e 用科学计数法格式化浮点数
- %E 作用同%e,用科学计数法格式化浮点数
- %g 根据值的大小决定使用%f或%e
- %G 作用同%g,根据值的大小决定使用%f或%E
print("%s是个%.2f版本!"%("Python",3.764))
Python是个3.76版本!
text="下雨了下雨啦!"
print("I said %s" % text)
print(len(text))
print(range(1,len(text)))
I said 下雨了下雨啦!
7
range(1, 7)
- 格式化操作符辅助指令
m.n
m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
-
用作左对齐
+
在正数前面显示加号( + )
#
在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’)
0
显示的数字前面填充’0’而不是默认的空格
print("%d" %10)
print("%-10d"%10)
print("%+10d"%10)
print("%+d"%10)
10
10
+10
+10
练习题
1、字符串函数回顾
怎么批量替换字符串中的元素?
怎么把字符串按照空格进⾏拆分?
怎么去除字符串⾸位的空格?
str1="w is a student,not a teacher!"
a="was"
b="234"
str2=str1.maketrans(a,b)
print(c)
print(str1.translate(c))
{97: 49, 101: 50, 105: 51, 111: 52, 112: 53}
w 3s 1 stud2nt,n4t 1 t21ch2r!
str1="w is a student,not a teacher!"
str2=str1.split()
print(str2)
['w', 'is', 'a', 'student,not', 'a', 'teacher!']
str1=" w is a student,not a teacher!"
str2=str1.lstrip()
print(str2)
w is a student,not a teacher!
2、实现isdigit函数
题目要求
实现函数isdigit, 判断字符串里是否只包含数字0~9
def isdigit(string):
"""
判断字符串只包含数字
:param string:
:return:
"""
a=string.isnumeric()
return a
pass
str1="1234"
print(isdigit(str1))
str2="1 2 3 4"
print(isdigit(str2))
True
False
3、leetcode 5题 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例:
输入: “babad”
输出: “bab”
输入: “cbbd”
输出: “bb”
while True:
str1=input("请输入一个字符串:")
if len(str1)>10:
print("输入字符串过长,请重新输入!")
else:
break
print("你输入的字符串是:%s"%str1)
huistr=[]
for i in range(0,len(str1)):
str2=str1[i:]
while str2.count(str2[0])>=2:
a=str2[0:str2.rfind(str2[0])+1]
b=a[::-1]
if a==b:
huistr.append(a)
str2=str2[:str2.rfind(str2[0])]
print("所有的回文子串是:",huistr)
if len(huistr)>0:
huistrmax=huistr[0]
for i in huistr:
if len(huistrmax)<len(i):
huistrmax=i
print("最长的回文子串是:",huistrmax)
else:
print("没有回文子串!")
请输入一个字符串:12345433
你输入的字符串是:12345433
所有的回文子串是: ['34543', '454', '33']
最长的回文子串是: 34543