当前位置: 移动技术网 > IT编程>脚本编程>Python > DW-Python-Task 4: 列表、元组和字符串

DW-Python-Task 4: 列表、元组和字符串

2020年07月30日  | 移动技术网IT编程  | 我要评论
列表1.创建列表的方法1.1 创建空列表st = []或st = list()1.2 用range()创建列表example = list(range(10))example#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]注意,下面这个方法是错误的:example = [range(10)]example#[range(0, 10)]#这样子写的话range(10)被当成一个元素example[5]#--------------------------------

列表

1.创建列表的方法

1.1 创建空列表

st = []st = list()

1.2 用range()创建列表

example = list(range(10))
example
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

注意,下面这个方法是错误的:

example = [range(10)]
example
#[range(0, 10)]
#这样子写的话range(10)被当成一个元素
example[5]
#---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-7-c1bab557331d> in <module>
      1 example = [range(10)]
----> 2 example[5]

IndexError: list index out of range
#直接索引会报错
example[0][5]
#5
#双重索引的话则可以从range(10)中进行索引

1.3 用推导式创建列表

推导式创建列表是一个很灵活的方法,熟练使用可以减少很多工作量,但是阅读起来也比较费劲。
`example = [ expression for condition [if condition]]

  • 简单的推导式
example = [0 for i in range(100)]
example = list(0 for i in range(100))
#这两者是等价的
  • 进阶
    带if表达式:
x = [i for i in range(100) if (i % 2) != 0 and (i % 3) == 0]
print(x, type(x))

# [3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99] <class 'list'>

多个for表达式:

example = list((i,j) for i in range(10)for j in range(5))
example
#[(0, 0),
 (0, 1),
 (0, 2),
 (0, 3),
 (0, 4),
 (1, 0),
 (1, 1),
 (1, 2),
 (1, 3),
 (1, 4),
 (2, 0),
 (2, 1),
 (2, 2),
 (2, 3),
 (2, 4),
 (3, 0),
 (3, 1),
 (3, 2),
 (3, 3),
 (3, 4),
 (4, 0),
 (4, 1),
 (4, 2),
 (4, 3),
 (4, 4),
 (5, 0),
 (5, 1),
 (5, 2),
 (5, 3),
 (5, 4),
 (6, 0),
 (6, 1),
 (6, 2),
 (6, 3),
 (6, 4),
 (7, 0),
 (7, 1),
 (7, 2),
 (7, 3),
 (7, 4),
 (8, 0),
 (8, 1),
 (8, 2),
 (8, 3),
 (8, 4),
 (9, 0),
 (9, 1),
 (9, 2),
 (9, 3),
 (9, 4)]
 #可以发现,在前面的for循环是外层循环
 #for可以嵌套任意多个

expression不是简单数据类型的例子:

example = [[0 for column in range(4)] for row in range(3)]
example
#[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
#得到一个3x4矩阵
#expression的列表也可以是元组、字典、字符串、集合

2.对列表的操作

2.1 向列表中添加元素(部分列表操作符也可以实现添加元素的功能,参考2.4)

三个方法:list.append(obj) list.extend(seq) list.insert(index,obj),都是inplace的

2.1.1 list.append(obj)list.extend(seq)

list.append(obj) 在列表末尾添加新的对象,只接受一个参数,参数可以是任何数据类型,被追加的元素在 list 中保持着原结构类型
eg:

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.append({'Thursday':'Sunday'})
print(x)  
#['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', {'Thursday': 'Sunday'}]

list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表),extend()一次也只接受一个参数,这点和append()一样
eg:

  • 传入数组、元组、集合
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.extend({'Thursday','Sunday'})
x.extend(('Thursday','Sunday'))
x.extend(['Thursday','Sunday'])
#这三者是等价的
print(x)
#['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Thursday', 'Sunday']
  • 传入字典
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.extend({'Thursday':'Sunday'})
print(x)  
#['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Thursday']

注意体会两者的差别,extend()会直接将列表,元组,集合拆开将里面的元素扩展到原来的列表后面,字典则是取key,操作是inplace的

2.2.2 list.insert(index,obj)

list.insert(index, obj) 在编号 index 位置插入 obj,插入方式类似append(),不改变数据类型,对于数组、元组、集合等不会拆开插入

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.insert(2, ['Sunday',1])
print(x)
#['Monday', 'Tuesday', ['Sunday', 1], 'Wednesday', 'Thursday', 'Friday']

2.2 从列表中去除元素

有三个方法:list.remove(obj) list.pop([index = -1]) del var1[, var2 ……]

2.2.1 list.remove(obj)

list.remove(obj) 移除列表中某个值的第一个匹配项,只接受一个参数,不改变传入值得数据类型,传入容器型数据结构时不会拆开,类似append()
不返回值
eg:

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.remove('Monday')
print(x)  # ['Tuesday', 'Wednesday', 'Thursday', 'Friday']

2.2.2 list.pop([index = -1])

list.pop([index=-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
传入的是index

2.2.3 del var1[, var2 ……]

del var1[, var2 ……] 删除单个或多个对象。
eg:

x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
del x[0:2]
print(x)  # ['Wednesday', 'Thursday', 'Friday']
  • 如果你要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能继续使用它,就使用方法pop(),因为pop有返回值。

2.3 列表索引

切片的通用写法是 start : stop : step,使用默认step时第二个:可以省略,·范围是[start,stop),左闭右开,右边从-1开始算

  • start和stop的eg:
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(x[-3:])  # ['Wednesday', 'Thursday', 'Friday']
print(week[:-3])  # ['Monday', 'Tuesday']
#右边从-1开始算
  • step的eg:
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[::-1])  
#['Friday', 'Thursday', 'Wednesday', 'Tuesday', 'Monday']
#倒序输出
print(week[4:0:-1])
#['Friday', 'Thursday', 'Wednesday', 'Tuesday']
'''
发现l两点:1.就算前面是4:0,也不能用[4:0:1],应该用-4
2.倒叙切片同样是[start,stop),如这个例子中就不包括week[0]
'''
  • 关于list[:]list[:]`返回列表中所有元素,但不等同于list,它是浅拷贝。
    浅拷贝和深拷贝:
list1 = [123, 456, 789, 213]
list2 = list1
list3 = list1[:]

print(list2)  # [123, 456, 789, 213]
print(list3)  # [123, 456, 789, 213]
list1.sort()
print(list2)  # [123, 213, 456, 789] 
print(list3)  # [123, 456, 789, 213]

list1 = [[123, 456], [789, 213]]
list2 = list1
list3 = list1[:]
print(list2)  # [[123, 456], [789, 213]]
print(list3)  # [[123, 456], [789, 213]]
list1[0][0] = 111
print(list2)  # [[111, 456], [789, 213]]
print(list3)  # [[111, 456], [789, 213]]

2.4 列表操作符

  • 等号操作符:==
  • 连接操作符 +
  • 重复操作符 *
  • 成员关系操作符 in、not in
  • 前面三种方法(append, extend, insert)可对列表增加元素,它们没有返回值,是直接修改了原数据对象。 而将两个list相加,需要创建新的 list 对象,从而需要消耗额外的内存,特别是当 list 较大时,尽量不要使用 “+” 来添加list。

2.5 列表其他方法

2.5.1list.count(obj)

统计某个元素在列表中出现的次数
eg:

list1 = [123, 456] * 3
print(list1)  # [123, 456, 123, 456, 123, 456]
num = list1.count(123)
print(num)  # 3

2.5.2 list.index(x[, start[, end]])

从列表中找出某个值第一个匹配项的索引位置
eg:

list1 = [123, 456] * 5
print(list1.index(123))  # 0
print(list1.index(123, 1))  # 2
print(list1.index(123, 3, 7))  # 4

2.5.3 list.reverse()

反向列表中元素
eg:

x = [123, 456, 789]
x.reverse()
print(x)  # [789, 456, 123]

2.5.4 list.sort(key=None, reverse=False)

对原列表进行排序。

key – 主要是用来进行比较的元素,只有一个参数,类型为函数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
该方法没有返回值,但是会对列表的对象进行排序。
eg:

# 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]
x = [(2, 2), (3, 4), (4, 1), (1, 3)]
x.sort(key=takeSecond)
print(x)
# [(4, 1), (2, 2), (1, 3), (3, 4)]

x.sort(key=lambda a: a[0])
print(x)
# [(1, 3), (2, 2), (3, 4), (4, 1)]

3. 习题

1、列表操作练习

列表lst 内容如下

lst = [2, 5, 6, 7, 8, 9, 2, 9, 9]

请写程序完成下列操作:

在列表的末尾增加元素15

list.append(15)

在列表的中间位置插入元素20

list.insert(int(len(list)/2),20)

将列表[2, 5, 6]合并到lst中

list.extend([2,5,6])

移除列表中索引为3的元素

list.pop(3)

翻转列表里的所有元素

list.reverse()

对列表里的元素进行排序,从小到大一次,从大到小一次

list.sort()
list.sort(reverse = True)

2、修改列表

问题描述:

lst = [1, [4, 6], True]

请将列表里所有数字修改成原来的两倍

lst[0] = 2
lst[1][0] = 8
lst[1][1] = 12

3、leetcode 852题 山脉数组的峰顶索引

如果一个数组k符合下面两个属性,则称之为山脉数组

数组的长度大于等于3

存在iiii >0 且i<len(k)1i<\operatorname{len}(k)-1, 使得k[0]<k[1]<<k[i1]<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]

这个ii就是顶峰索引。

现在,给定一个山脉数组,求顶峰索引。

示例:

输入:[1, 3, 4, 5, 3]

输出:True

输入:[1, 2, 4, 6, 4, 5]

输出:False

def peakIndexInMountainArray(list):
    for i in range(len(list)):
        if list[i] > list[i+1]:
            break
    return i

元组

1. 元组和列表的比较

Python 的元组与列表类似,不同之处在于tuple被创建后就不能对其进行修改,类似字符串。
元组与列表类似,也用整数来对它进行索引 (indexing) 和切片 (slicing),索引和切片方式完全相同,+*规则也完全相同。

2. 创建元组

t2 = 1, 10.31, 'python'
print(t1, type(t1))
# (1, 10.31, 'python') <class 'tuple'>

print(t2, type(t2))
# (1, 10.31, 'python') <class 'tuple'>

可以发现,将一个变量赋值为元组时有括号和没括号是一样的,但是有一种情况需要注意,就是只有单个元素的元组,应该加一个,,否则括号会被当成运算符

x = (1,2,3)
x
#(1,2,3)
x = 1,2,3
x
#(1,2,3)
x = (1)
x
#1
#不是元组
x = (1,)
x
#x = (1,)
#是元组
x = 1,
x
#(1,)
#也是元组
print(8 * (8))  # 64
print(8 * (8,))  # (8, 8, 8, 8, 8, 8, 8, 8)

3.元组元素改变

  • 方法一
week = ('Monday', 'Tuesday', 'Thursday', 'Friday')
print(id(week))
#1736007406600
week = week[:2] + ('Wednesday',) + week[2:]
print(week)  # ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
print(id(week))
#('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
1736006309544

上面这个例子中,前后week地址已经改变了,这样的操作相当于对week赋值一个新的元组,而不是在原来的元组上进行更改,这与元组不能进行修改不矛盾。

  • 方法二
    元组有不可更改 (immutable) 的性质,因此不能直接给元组的元素赋值,但是只要元组中的元素可更改 (mutable),如列表,那么我们可以直接更改其元素,注意这跟赋值其元素不同。
t1 = (1, 2, 3, [4, 5, 6])
print(t1)  # (1, 2, 3, [4, 5, 6])

t1[3][0] = 9
print(t1)  # (1, 2, 3, [9, 5, 6])

4. 元组的操作符

规则和列表的操作符完全相同

5. 元组的内置方法

由于元组不可变,只有count()index()两种方法,传入的对象都是obj

6. 解压元组

解压元祖其实就是同时赋值

6.1 解压一维元组

x = 1,2,3
a,b,c = x
print(a,b,c)#1 2 3
(a,b,c) = x
print(a,b,c)#1 2 3
(a,b,c) = 1,2,3
print(a,b,c)#1 2 3
#可以发现等号两边最外层的括号都是可有可无的,对于二维元组的解压同理

6.2 解压二维元组

t = (1, 10.31, ('OK', 'python'))
(a, b, (c, d)) = t
print(a, b, c, d)
# 1 10.31 OK python

t = (1, 10.31, ['OK', 'python'])
(a, b, (c,d)) = t
print(a, b, c, d)
# 1 10.31 OK python

t = (1, 10.31, ('OK', 'python'))
(a, b, [c,d]) = t
print(a, b, c, d)
# 1 10.31 OK python

#可以发现,赋值的时候,等号两边的列表和元组可以对应进行赋值,因为他们都是有序的,但是集合则不行,因为集合是无序的

6.3 只需要部分元素的解压

如果你只想要元组其中几个元素,用通配符「*」,英文叫 wildcard,在计算机语言中代表一个或多个元素。下例就是把多个元素丢给了 rest 变量,相应的规则看代码就能理解不多bb。

t = 1, 2, 3, 4, 5
a, b, *rest, c = t
print(a, b, c)  # 1 2 5
print(rest)  # [3, 4]

【例子】如果你根本不在乎 rest 变量,那么就用通配符「*」加上下划线「_」。

t = 1, 2, 3, 4, 5
a, b, *_ = t
print(a, b)  # 1 2

7. 练习

1、元组概念

写出下面代码的执行结果和最终结果的类型

(1, 2)*2
(1, )*2
(1)*2

分析为什么会出现这样的结果.

  • 结果:
(1,2,1,2)
(1,1)
2
  • 分析:前面两个是元组,最后一个是数字,括号中的1没有逗号,括号被当成运算符,相当于1*2
    2、拆包过程是什么?
  • 同时赋值
a, b = 1, 2

上述过程属于拆包吗?

  • 属于,左右两边都是元组。
    可迭代对象拆包时,怎么赋值给占位符?
  • 占位符左边从头按顺序赋值,右边从尾按顺序赋值,剩下的打包成列表按顺序丢给占位符。

字符串

1. 字符串的定义

Python 中字符串被定义为引号之间的字符集合。
Python 支持使用成对的 单引号 或 双引号 或 三引号(使用三引号的字符串可换行,可以是三个成对的单引号也可以是三个成对的双引号)。
eg:

a = """aaa
aaa
"""
a
#'aaa\naaa\n'

a = '''d
d
d
'''
a
#'d\nd\nd\n'

2. Python 的常用转义字符

在这里插入图片描述
关于\r的意思:

print('aaaa\raaaa')#aaaa
print('aaa\raaaaaaa')#aaaaaaa
print('htsb\rrq')#rqsb

就是在遇到\r的时候返回本行的最开始位置,注意是本行首位置,不是整个字符串的首位置,如果有\n的话就是返回到\r前面最后一个\n的后面位置,其实也就是本行的首位置:

print('pmsb\nhtsb\rrq')
'''
pmsb
rqsb
'''
  • 原始字符串只需要在字符串前边加一个英文字母 r 即可。
print(r'C:\Program Files\Intel\Wifi\Help')  
# C:\Program Files\Intel\Wifi\Help

3. 字符串的索引和切片

与列表和元组规则完全相同:[start:stop:step]

4. 字符串的常用内置方法

字符串的操作十分灵活。

4.1 大小写转换方法

capitalize() 将字符串的第一个字符转换为大写。
lower() 转换字符串中所有大写字符为小写。
upper() 转换字符串中的小写字母为大写。
swapcase() 将字符串中大写转换为小写,小写转换为大写。

4.2 计数和判断等方法

  • count(str, beg= 0,end=len(string))返回str在 string 里面出现的次数,如果beg(begin的缩写)或者end指定则返回指定范围(注意,同索引一样是左闭右开)内str出现的次数。(beg,end可以为负数)
    eg:
str2 = "DAXIExiaoxie"
print(str2.count('xi'))  # 2
print(str2.count('xi',0,6))  # 0
print(str2.count('xi',0,7))  # 1
  • endswith(suffix, beg=0, end=len(string)) 检查字符串是否以指定子字符串 suffix 结束,如果是,返回 True,否则返回 False。如果 begend指定值,则在指定范围内检查。(beg,end可以为负数)
  • startswith(substr, beg=0,end=len(string)) 检查字符串是否以指定子字符串 substr 开头,如果是,返回 True,否则返回 False。如果 begend 指定值,则在指定范围内检查。(beg,end可以为负数)
    范围都是左闭右开。
    eg:
str2 = "DAXIExiaoxie"
print(str2.endswith('ie'))  # True
print(str2.endswith('ie',0,-1)) # False
  • find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 begend,则检查是否包含在指定范围内,如果包含,返回左起第一个的开始的索引值,否则返回 -1
  • rfind(str, beg=0,end=len(string)) 类似于 find() 函数,不过是从右边开始查找。
str2 = "DAXIExiaoxie"
print(str2.find('xi'))  # 5
# 返回的是左起第一个'xi'的'x'的位置
print(str2.find('ix'))  # -1
print(str2.rfind('xi'))  # 9
# 返回的是右起第一个'xi'的'x'的位置(注意,不是右起第一个'xi'的'i'的位置)
'''
  • isnumeric() 如果字符串中包含数字字符,则返回 True,否则返回 False。
  • ljust(width[, fillchar])返回一个原字符串左对齐,并使用fillchar(默认空格)填充至长度width的新字符串。
  • rjust(width[, fillchar])返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度width的新字符串。
  • lstrip([chars]) 截掉字符串左边的空格或指定字符。
  • rstrip([chars]) 删除字符串末尾的空格或指定字符。
  • strip([chars]) 在字符串上执行lstrip()和rstrip(),也就是删除两边的空格指定字符。
    rstrip() lstrip() strip()如果不传入参数,默认去掉空格和\n \t \r这种不输出内容的转义字符,但是不会去掉\\这样的输出具体内容的转义字符,eg:
a = 'dfsaf s f  sdfdsf     f    \n\r\t'
a.strip()
# 'dfsaf s f  sdfdsf     f'

a = 'dfsaf s f  sdfdsf     f    \n\r\t'
a.strip()
# 'dfsaf s f  sdfdsf     f    \n\r\t\\'

以下是一点rstrip() lstrip() strip()的灵活使用:

str5 = ' I Love LsgoGroup '
print(str5.lstrip().strip('I'))  # ' Love LsgoGroup '

在对字符串的处理中灵活地组合使用这些方法是很有用的,后面还有一些组合使用的例子。

  • partition(sub) 找到左起第一个子字符串sub,把字符串分为一个三元组(pre_sub,sub,fol_sub),如果字符串中不包含sub则返回('原字符串','','')
    rpartition(sub)类似于partition()方法,不过是从右边开始查找。
str5 = ' I Love LsgoGroup '
print(str5.strip().partition('o'))  # ('I L', 'o', 've LsgoGroup')
#可以看到是左起第一个'o'
  • replace(old, new [, max])把 将字符串中的old替换成new,如果max指定,则替换不超过max次。
str5 = ' I Love LsgoGroup '
print(str5.strip().replace('I', 'We'))  # We Love LsgoGroup

fuck = 'fuccck'
fuck.replace('c','m',2)
# 'fummck'

*split(str="", num) 不带参数默认是以空格为分隔符切片字符串,如果num参数有设置,则仅分隔num个子字符串,返回切片后的子字符串拼接的列表

str5 = ' I Love LsgoGroup '
print(str5.strip().split())  # ['I', 'Love', 'LsgoGroup']
print(str5.strip().split('o'))  # ['I L', 've Lsg', 'Gr', 'up']
u = "www.baidu.com.cn"
# 使用默认分隔符
print(u.split())  # ['www.baidu.com.cn']

# 以"."为分隔符
print((u.split('.')))  # ['www', 'baidu', 'com', 'cn']

# 分割0次
print((u.split(".", 0)))  # ['www.baidu.com.cn']

# 分割一次
print((u.split(".", 1)))  # ['www', 'baidu.com.cn']

# 分割两次,并取序列为1的项
print((u.split(".", 2)[1]))  # baidu

# 分割两次,并把分割后的三个部分保存到三个变量
u1, u2, u3 = u.split(".", 2)
print(u1)  # www
print(u2)  # baidu
print(u3)  # com.cn
string = "hello boy<[www.baidu.com]>byebye"
print(string.split('[')[1].split(']')[0])  # www.baidu.com
print(string.split('[')[1].split(']')[0].split('.'))  # ['www', 'baidu', 'com']

数据分析的工作中经常需要对字符串进行类似上面的混合操作。

  • splitlines([keepends]) 按照行(’\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数keepends为 False,不包含换行符,如果为 True,则保留换行符(包括’\r’, ‘\r\n’, \n’)。
str6 = 'I \r\n Love \n LsgoGroup  \r  才怪'
print(str6.splitlines()) 
# ['I ', ' Love ', ' LsgoGroup  ', '  才怪']
print(str6.splitlines(True))
# ['I \r\n', ' Love \n', ' LsgoGroup  \r', '  才怪']
  • maketrans(intab, outtab) 创建字符映射的转换表(其实就是一个字典),第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
  • translate(table,) 根据参数table给出的表(可以是maketrans()也可以是字典),转换字符串的字符,要过滤掉的字符放到参数中。
str7 = 'this is string example....wow!!!'
intab = 'aeiou'
outtab = '12345'
trantab = str7.maketrans(intab, outtab)
print(trantab)  # {97: 49, 111: 52, 117: 53, 101: 50, 105: 51}
print(str7.translate(trantab))  # th3s 3s str3ng 2x1mpl2....w4w!!!

这边注意到几个地方:
1.maketrans()不可以单独使用,必须str.maketrans()
2.str.maketrans()str则可以是任意的,不影响后续trantab()的使用,eg:

str7 = 'this is string example....wow!!!'
intab = 'aeiou'
outtab = '12345'
strtest = '1'
trantab = strtest.maketrans(intab, outtab)
print(trantab)  # {97: 49, 111: 52, 117: 53, 101: 50, 105: 51}
print(str7.translate(trantab))  # th3s 3s str3ng 2x1mpl2....w4w!!!

结果是完全一样的
3.translate()传入与maketrans()返回的字典得到的结果和上述方法的结果也是完全一样的,但是如果传入{'a':1,'e':2,'i':3,'o':4,'u':5}则不能进行转换:

str7 = 'this is string example....wow!!!'
print(str7.translate({97: 49, 111: 52, 117: 53, 101: 50, 105: 51}))  # th3s 3s str3ng 2x1mpl2....w4w!!!
print(str7.translate({'a':1,'e':2,'i':3,'o':4,'u':5})) # this is string example....wow!!!

所以,这两个方法一般结合使用。

5. 字符串的格式化

5.1 format()格式化函数

str8 = "{0} Love {1}".format('I', 'Lsgogroup')  # 位置参数
print(str8)  # I Love Lsgogroup

str8 = "{a} Love {b}".format(a='I', b='Lsgogroup')  # 关键字参数
print(str8)  # I Love Lsgogroup

str8 = "{0} Love {b}".format('I', b='Lsgogroup')  # format()中位置参数要在关键字参数之前
print(str8)  # I Love Lsgogroup

str8 = '{0:.2f}{1}'.format(27.658, 'GB')  # 保留小数点后两位
print(str8)  # 27.66GB

5.2 %

print('%c' % 97)  # a
print('%c %c %c' % (97, 98, 99))  # a b c
print('%d + %d = %d' % (4, 5, 9))  # 4 + 5 = 9
print("我叫 %s 今年 %d 岁!" % ('小明', 10))  # 我叫 小明 今年 10 岁!
print('%o' % 10)  # 12
print('%x' % 10)  # a
print('%X' % 10)  # A
print('%f' % 27.658)  # 27.658000
print('%e' % 27.658)  # 2.765800e+01
print('%E' % 27.658)  # 2.765800E+01
print('%g' % 27.658)  # 27.658
text = "I am %d years old." % 22
print("I said: %s." % text)  # I said: I am 22 years old..
print("I said: %r." % text)  # I said: 'I am 22 years old.'.

5.3 字符串格式化符号和格式化操作符辅助指令

这些字符串格式化符号和格式化操作符辅助指令是%format()都可以用的
在这里插入图片描述

  • 关于rper():
    描述
    repr() 函数将对象转化为供解释器读取的形式。
    语法
    以下是 repr() 方法的语法:
    repr(object)
    参数
    object – 对象。
    返回值
    返回一个对象的 string 格式
print('%c' % 97)  # a
print('%c %c %c' % (97, 98, 99))  # a b c
print('%d + %d = %d' % (4, 5, 9))  # 4 + 5 = 9
print("我叫 %s 今年 %d 岁!" % ('小明', 10))  # 我叫 小明 今年 10 岁!
print('%o' % 10)  # 12
print('%x' % 10)  # a
print('%X' % 10)  # A
print('%f' % 27.658)  # 27.658000
print('%e' % 27.658)  # 2.765800e+01
print('%E' % 27.658)  # 2.765800E+01
print('%g' % 27.658)  # 27.658
text = "I am %d years old." % 22
print("I said: %s." % text)  # I said: I am 22 years old..
print("I said: %r." % text)  # I said: 'I am 22 years old.'.
  • 格式化操作符辅助指令
    在这里插入图片描述
print('%5.1f' % 27.658)  # ' 27.7'
print('%.2e' % 27.658)  # 2.77e+01
print('%10d' % 10)  # '        10'
print('%-10d' % 10)  # '10        '
print('%+d' % 10)  # +10
print('%#o' % 10)  # 0o12
print('%#x' % 108)  # 0x6c
print('%010d' % 5)  # 0000000005

6.习题

1、字符串函数回顾

怎么批量替换字符串中的元素?

  • replace()
    怎么把字符串按照空格进⾏拆分?
  • split()
    怎么去除字符串⾸位的空格?
  • lstrip()
    2、实现isdigit函数

题目要求

实现函数isdigit, 判断字符串里是否只包含数字0~9

def isdigit(string):
    if string.isnumeric():
        print('字符串里只包含0~9')
    else:
        print('字符串里不是只包含0~9')

3、leetcode 5题 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例:

输入: “babad”

输出: “bab”

输入: “cbbd”

输出: “bb”

class Solution:
    def longestPalindrome(self, s: str) -> str:
        n = len(s)
        dp = [[False] * n for _ in range(n)]
        ans = ""
        # 枚举子串的长度 l+1
        for l in range(n):
            # 枚举子串的起始位置 i,这样可以通过 j=i+l 得到子串的结束位置
            for i in range(n):
                j = i + l
                if j >= len(s):
                    break
                if l == 0:
                    dp[i][j] = True
                elif l == 1:
                    dp[i][j] = (s[i] == s[j])
                else:
                    dp[i][j] = (dp[i + 1][j - 1] and s[i] == s[j])
                if dp[i][j] and l + 1 > len(ans):
                    ans = s[i:j+1]
        return ans

本文地址:https://blog.csdn.net/ycs1010647987/article/details/107624505

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网