python程序设计基础:字符串与正则表达式

第四章:字符串与正则表达式

4.1字符串

最早的字符串编码是美国标准信息交换码ASCII,仅对10个数字、26个大写英文字母、26个小写英文字母及一些其他符号进行了编码。ASCII码采用1个字节来对字符进行编码,最多只能表示256个符号。

随着信息技术的发展和信息技术的需要,各国的文字都需要进行编码,不同的应用领域和场合对字符串编码的要求有不同,于是又分别设计了多种不同的编码格式,常见的主要有UTF-8、UTF-16、UTF-32、GB2312、GBK、CP936、base64、CP437等等。

GB2312是我国定制的中文编码,使用1个字节表示英语2个字节表示中文;GBK是GB

2312的扩充,而CP936是微软在GBK基础上开发的编码方式。GB2312、GBK和CP936都是使用2个字节表示中文。

UTF-8对全世界所有国家需要用到的字符进行了编码,以1个字节表示英语字符(兼容ASCII),以3个字节表示中文,还有些语言的符号使用2个字节(例如俄语和希腊语符号)或4个字节。

不同编码格式之间相差很大,采用不同的编码格式意味着不同的表示和存储形式,把同一字符存入文件时,写入的内容可能不同,在试图理解其内容时必须了解编码规则并进行正确的解码。如果解码方法不正确就无法还原信息,从这个角度来讲,字符串编也就具有加密的效果。

python 3.x 完全支持中文字符,默认使用UTF8编码格式,无论是一个数字、英文字母,还是汉字,都按一个字符对待和处理。

>s='中国山东烟台'
>len(s)                #字符串长度,或者包含的字符个数
6

>s='中国山东烟台ABCDE'        #中文与英文字符同样对待,都算一个字符
>len(s)
11

>姓名='张三'                #使用中文作为变量名
>print(姓名)                #输出变量的值
张三

在python中,字符串属于不可变序列(有序序列)类型,除了支持序列通用方法(包括分片操作)以外,还支持特有的字符串操作方法。

>testString='good'
>id(testString)
2377223672624

>testString[0]='b'        #不可变指的是,不能通过下标的方式改变字符串中的某个元素值
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    testString[0]='b'
TypeError: 'str' object does not support item assignment

>testString='well'
>id(testString)
2377223676080

元组和字符串:不能改变其中的元素值

python字符串驻留机制:对于短字符串,将其赋值给对多个不同的对象时,内存中只有一个副本,多个对象共享该副本。长字符串不遵守驻留机制。

4.1.1字符串格式化

常用格式字符

>x=1235
>so="%o"%x        #%o八进制数
>so
'2323'

>sh="%x"%x        #  #%x十六进制数
>sh
'4d3'

>se="%e"%x
>se
'1.235000e+03'

#ord:返回单个字符的ASCII值

#chr:输入整数返回对应的ASCII符号

>chr(ord("3")+1)
'4'

>"%s"%65        #%s转换成字符串
'65'

>"%s"%65333
'65333'

>"%d"%"555"        #%d转换成整数
Traceback (most recent call last):
  File "<pyshell#35>", line 1, in <module>
    "%d"%"555"
TypeError: %d format: a real number is required, not str

>int('555')        #eval相同
555

>'%s'%[1,2,3]
'[1, 2, 3]'

>str((1,2,3))
'(1, 2, 3)'

>str([1,2,3])
'[1, 2, 3]'

使用format方法进行格式化

>print("The number {0:,} in hex is:{0:#x},the number {1} in oct is {1:#o}".format(5555,55))
The number 5,555 in hex is:0x15b3,the number 55 in oct is 0o67

>print("The number {1:,} in hex is:{1:#x},the number {0} in oct is {0:#o}".format(5555,55))
The number 55 in hex is:0x37,the number 5555 in oct is 0o12663

>print("my name is {name},my age is {age},and my QQ is {qq}".format(name="Dong Fuguo",age=37,qq='306467355'))
my name is Dong Fuguo,my age is 37,and my QQ is 306467355

>position=(5,8,13)
>print("X:{0[0]};Y:{0[1]};Z:{0[2]}".format(position))
X:5;Y:8;Z:13

weather=[("Monday","rain"),("Tuesday","sunny"),("Aednesday","sunny"),("Thursday","rain"),("Firday","Cloudy")]
formatter="Weather of '{0[0]}' is '{0[1]}'".format
#map:把一个函数映射到一个序列上。
for item in map(formatter,weather):print(item)#第二种输出方式
for item in weather:print(formatter(item))

从python3.6开始支持一种新的字符串格式化方式,官方叫做Formatted String Literals,其含义与字符串对象的format()方法类似,但形式更加简洁。

>name='Dong'
>age=39
>f'My name is {name},and I am {age} years old.'
'My name is Dong,and I am 39 years old.'

>width=10        #宽度
>precision=4        #精度
>value=11/3        #计算的值

>f'result:{value:{width}.{precision}}'
'result:     3.667'

4.1.2字符串常用方法

find()、rfind()

find()和rfind方法分别用来查找一个字符串在另一个字符串指定范围(默认是整个字符串)中首次出现和最后一次出现的位置,如果不存在则返回-1

index()、rindex()

index()和rindex()方法用来返回一个字符串在另一个字符串指定范围中首次和最后一次出现的位置,如果不存在则抛出异常

count()

count()方法用来返回一个字符串在另一个字符串中出现的次数。

>s="apple,peach,banana,peach,pear"


>s.find("peach")        #在s字符串中查找peach出现的位置(下标)
6

>s.find("peach",7)        #从s字符串下标为7的位置开始找peach
19
>s.find("peach",7,20)        #从s字符串下标从7开始到20结束的区间找peach
-1

>s.rfind('p')        #从右向左找
25

>s.index('p')        #查找p在字符串中第一次出现的位置
1
>s.index('pe')
6
>s.index('pear')
25
>s.index('ppp')
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    s.index('ppp')
ValueError: substring not found
>s.count('p')
5
>s.count('pp')
1
>s.count('ppp')
0

split()、rsplit()

split()和rsplit()方法分别用来以指定字符串为分隔符,将字符串左端和右端开始将其分割成多个字符串,并返回包含分隔结果的列表;

partition()、rpartition()

partition()和rpartition()用来以指定字符串为分隔符将原字符分割为3部分,即分隔符前的字符串、分隔符字符串、分隔符后的字符串,如果指定的分隔符不在原字符串中,则返回原字符串和两个空字符串。

>s="apple,peach,banana,pear"

>li=s.split(",")
>li
['apple', 'peach', 'banana', 'pear']        #输出列表

>s.partition(',')
('apple', ',', 'peach,banana,pear')
>s.rpartition(',')
('apple,peach,banana', ',', 'pear')
>s.partition('banana')
('apple,peach,', 'banana', ',pear')

>s="2014-10-31"
>t=s.split("-")        #遇到-号就分隔
>print(t)
['2014', '10', '31']
>print(list(map(int,t)))
[2014, 10, 31]

对于split()和rsplit()方法,如果不指定分隔符,则字符串中的人任何空白符号(包括空格、换行符、制表符等等;多个算一个)都将被认为是分隔符,返回包含最终分割结果的列表。

>s='hello world \n\n My name is Dong'
>s.split()
['hello', 'world', 'My', 'name', 'is', 'Dong']

>s='\n\nhello world \n\n\n My name is Dong  '
>s.split()
['hello', 'world', 'My', 'name', 'is', 'Dong']

>s='\n\nhello\t\t world \n\n\n my name\t is Dong  '
>s.split()
['hello', 'world', 'my', 'name', 'is', 'Dong']

split()和rsplit()方法还允许指定最大分隔次数

>s='\n\nhello\t\t world \n\n\n My name is Dong  '
>s.split(None,1)        #None表示不指定分隔符,使用任意空白字符作为分隔符;最大只分隔一次
['hello', 'world \n\n\n My name is Dong  ']
>s.rsplit(None,1)        #从右往左,分隔一次
['\n\nhello\t\t world \n\n\n My name is', 'Dong']

>s.split(None,2)        #从左往右,分隔两次
['hello', 'world', 'My name is Dong  ']
>s.rsplit(None,2)        #从右往左,分隔两次
['\n\nhello\t\t world \n\n\n My name', 'is', 'Dong']

>s.split(maxsplit=6)        #指定最大分隔次数为6次
['hello', 'world', 'My', 'name', 'is', 'Dong']
>s.split(maxsplit=100)          #指定最大分隔次数为100次
['hello', 'world', 'My', 'name', 'is', 'Dong']

调用split()方法并且不传递任何参数时,将使用空白字符作为分隔符,把连续多个空白字符看作一个;明确传递参数指定split()使用分隔符时,情况略有不同。

>'a,,,bb,,cc'.split(',')
['a', '', '', 'bb', '', 'cc']

>'a\t\t\tbb\t\tccc'.split('\t')
['a', '', '', 'bb', '', 'ccc']

>'a\t\tbb\t\tccc'.split()
['a', 'bb', 'ccc']

partition()和rpartition()方法以指定字符串为分隔符将原字符串分隔为3部分,即分隔符之前的字符串、分隔符字符串和分隔符之后的字符串。

>s="apple,peach,banana,pear"

>s.partition(',')
('apple', ',', 'peach,banana,pear')
>s.rpartition(',')
('apple,peach,banana', ',', 'pear')

>s.partition('banana')
('apple,peach,', 'banana', ',pear')
>s.partition('banana')
('apple,peach,', 'banana', ',pear')

>'abababab'.partition('a')
('', 'a', 'bababab')
>'abababab'.rpartition('a')
('ababab', 'a', 'b')

join()

字符串连接join()

>li=["apple","peach","banana","pear"]
>sep=","        #指定分隔符
>s=sep.join(li)        #使用分隔符的方法join,就可以将列表中的字符串连接起来
>s
'apple,peach,banana,pear'

+

不推荐使用+运算符连接字符串,优先使用join()方法

#+运算符连接字符串
import timeitstrlist=['This is a long string that will not keep in memory.' for n in range(10000)]def use_join():return "".join(strlist)
def use_plus():result=""for strtemp in strlist:result=result+strtempreturn result#上面的测试代码
if__name__=='__main__':times=1000#从__main__中导入并调用use_joinjointimer=timeit.Timer('use_join()','from  import use_join')print("time for join:",jointimer.timeit(number=times))plustimer=timeit.Timer('use_plus()','from __main__ import use_plus')print('time for plus:',plustimer.timeit(number=times))

timeit模块还支持下面代码演示的用法,从运行结果可以看出当需要对大量数据进行类型转换时,内置函数map()可以提供非常高的效率。

#执行的语句,执行的次数

>timeit.timeit('"-".join(str(n) for n in range(100))',number=10000)
0.09980920003727078
>timeit.timeit('"-".join([str(n) for n in range(100)])',number=10000)
0.07888470002217218
>timeit.timeit('"-".join(map(str,range(100)))',number=10000)
0.06950240000151098

lower()、upper()、capitalize(0、title()、swapcase()

#返回的都是新字符串,并不是在原来的字符串上进行修改

>s="What is Your Name?"
>s.lower()                #返回小写字符串
'what is your name?'

>s.upper()                #返回大写字符串
'WHAT IS YOUR NAME?'

>s.capitalize()                #字符串首字符大写
'What is your name?'

>s.title()                #每个但单词的首字母大写
'What Is Your Name?'

>s.swapcase()                #大小写互换
'wHAT IS yOUR nAME?'

replace()

查找替换replace(),类似于“查找与替换”功能

#实际是返回一个新字符串

>s="中国,中国"
>s
'中国,中国'

>s2=s.replace("中国","中华人民共和国")        #s中查找所有的中国,并全部替换
>s2
'中华人民共和国,中华人民共和国'

敏感词替换

测试用户输入的是否是敏感词,如果有敏感词的话就把敏感词替换为3个星号***。

>words=('测试','非法','暴力','话')
>text='这句话里含有非法内容'
>for word in words:
    if word in text:
        text=text.replace(word,'***')        #这句话中的所有查到的这个词全部替换

        
>text
'这句***里含有***内容'

maketrans()、translate()

字符串对象的maketrans()、方法用来生成字符映射表,而translate()方法用来根据映射表中定义的对应关系转换字符串并替换其中的字符,使用这两个方法的组合可以同时处理多个不同的字符,replace()方法则无法满足这一要求。

#创建映射表,将字符“abcdef123”一一对应转换为“uvwxyz@#$”

>table=''.maketrans('abcdef123','uvwxyz@#$')
>s="Python is a greate programming language. I like it!"
>s.translate(table)
'Python is u gryuty progrumming lunguugy. I liky it!'                #按照映射表进行替换

凯撒加密

>import string        #导入模块
>def kaisa(s,k):
    lower=string.ascii_lowercase        #模块中的.ascii_lowercase,所有的小写字母
    upper=string.ascii_uppercase        #所有的大写字母
    before=string.ascii_letters          #所有的英文字母
    after=lower[k:]+lower[:k]+upper[k:]+upper[:k]        #大小写字母分别围城一圈,在第k位置分割
    table=''.maketrans(before,after)
    return s.translate(table)

>s="Python is a greate programming language. I like it!"
>kaisa(s,3)
'Sbwkrq lv d juhdwh surjudpplqj odqjxdjh. L olnh lw!'

strip()、rstrip()、lstrip()

strip():删除两边的空白字符;删除指定字符。

rstrip():删除字符串左边的空白字符或指定字符。

lstrip():删除字符串右边的空白字符或指定字符。

>s="  abc  "
>s2=s.strip()                #不带任何参数,strip()删除空白字符
>s2
'abc'

>'\n\nhello world   \n\n'.strip()                #删除空白字符
'hello world'

>"aaaassddf".strip("a")                #删除指定字符
'ssddf'
>"aaaassddf".strip("af")                #两边所有的a和f
'ssdd'

>"aaaassaaddf".strip("a")
'ssaaddf'

>"aaaassddfaaa".rstrip("a")        #删除字符串右端指定的字符
'aaaassddf'

>"aaaassddfaaa".lstrip("a")         #删除字符串左端指定的字符
'ssddfaaa'

这三个函数的参数指定的字符串并不作为一个整体对待,而是在原字符串的两侧、右侧、左侧删除参数字符串中包含的所有字符,一层一层地从外往里扒

#不是在原来的字符串中删,是返回一个新字符串(字符串是不可变的)

>"aabbccddeeeffg".strip("af")                #字母f不在字符串两侧,所以不删除
'bbccddeeeffg'

>"aabbccddeeeffg".strip("gaf")
'bbccddeee'

>"aabbccddeeeffg".strip("gbaef")
'ccdd'

>"aabbccddeeeffg".strip("gbaefcd")

''

eval()

内置函数eval()

>eval("3+4")        #对字符串求值
7


>a=3
>b=5
>eval("a+b")        #对表达式求值
8


>import math
>eval('help(math.sqrt)')                #相当于'help(math.sqrt)
Help on built-in function sqrt in module math:

sqrt(x, /)
    Return the square root of x.

>eval('math.sqrt(3)')
1.7320508075688772


>eval('aa')
Traceback (most recent call last):
  File "<pyshell#57>", line 1, in <module>
    eval('aa')
  File "<string>", line 1, in <module>
NameError: name 'aa' is not defined. Did you mean: 'a'?

eval()函数是非常危险的,可以执行任意的表达式

>a=input("Please input:")

#导入模块,调用方法,指定程序
Please input:__import__('os').startfile(r'C:\\Windows\notepad.exe')

>eval(a)
eval(__import__('os').system('md testtest'))        #md创建文件
Traceback (most recent call last):
  File "<pyshell#60>", line 1, in <module>
    eval(__import__('os').system('md testtest'))
TypeError: eval() arg 1 must be a string, bytes or code object

in:成员测试运算符

成员判断,关键字in

列表、元组、字符串、map、range效率低,时间复杂度是线性的,需要从头到尾扫描一遍这个在不在里面;字典和集合不存在这个情况,时间复杂度是常级的

>"a" in "abcde"        #测试
True

>"ab" in "abcde"
True


>"ac" in "abcde"
False


>"j" in "abcde"
False

序列重复:*

python字符串支持与整数的乘法运算,表示序列重复,也就是字符串内容的重复。(字典和集合不行)

>'abcd'*3
'abcdabcdabcd'

startswith()、endswith()

s.startswith(t)、s.endswith(t),判断字符串是否以指定字符串开始或结束。

>s='Beautiful is better than ugly.'
>s.startswith('Be')        #检测整个字符串
True


>s.startswith('Be',5)        #从下标为5的位置开始找
False


>s.startswith('Be',0,5)        #起始位置, 0-5之间找
True

os是python的一个标准库,其中它有一个函数listdir,指定路径;C盘根目录下所有这个三个类型结尾的图片

center()、ljust()、rjust(),返回指定宽度的新字符串,原字符串居中、左对齐或右对齐出现在新字符串中,如果指定宽度大于字符串长度,则使用指定的字符(默认为空格)进行填充。

>'Hello world!'.center(20)        #生成具有20个字符宽度的字符串,原来的字符串居中
'    Hello world!    '


>'Hello world!'.center(20,'=')        #居中对齐,以字符=进行填充
'====Hello world!===='


>'Hello world!'.ljust(20,'=')        #左对齐
'Hello world!========'


>'Hello world!'.rjust(20,'=')        #右对齐
'========Hello world!'

zfill()

zfill()返回指定宽度的字符串,在左侧以字符0进行填充。

>'abc'.zfill(5)        #生成一个新字符串,字符串有5个字符;在左侧填充数字字符0
'00abc'


>'abc'.zfill(2)        #指定宽度小于字符串长度,返回字符串本身
'abc'


>'abc'.zfill(20)
'00000000000000000abc'

islnum()、isalpha()、isdigit()

islnum()、isalpha()、isdigit()、isdecinmal()、isnumeric()、isspace()、isupper()、islower(),用来测试字符串是否为数字或字母、是否为字母、是否为数字字符、是否为空白字符、是否为大写字母以及是否为小写字母。

>'1234abcd'.isalnum()        #测试字符串是否为字母数字
True


>'1234abcd'.isalpha()        #测试字符串是否只包含英文字母;全部为英文字母时,返回True
False

>'1234abcd'.isdigit()        #测试字符串是否只包含数字
False


>'abcd'.isalpha()
True


>'1234.0'.isdigit()        #isdigit() :主要测试的是整数
False

isdigit()、isdecinmal()、isnumeric()

都是测试字符串是否为数字

>'1234'.isdigit()
True


>'九'.isnumeric()        #.isnumeric()方法支持汉字数字
True


>'九'.isdigit()
False


>'九'.isdecimal()
False


>'IVIIIX'.isdecimal()
False


>'IVIIIX'.isdigit()
False


>'IVIIIX'.isnumeric()        #.isnumeric() 方法支持罗马数字
True

除了字符串对象提供的方法以外,很多python内置函数也可以对字符串进行操作,例如:

>x='Hello world.'
>len(x)                #字符串长度
12


>max(x)                #最大字符
'w'


>min(x)
' '


>list(zip(x,x))                #zip()也可以用作于字符串
[('H', 'H'), ('e', 'e'), ('l', 'l'), ('l', 'l'), ('o', 'o'), (' ', ' '), ('w', 'w'), ('o', 'o'), ('r', 'r'), ('l', 'l'), ('d', 'd'), ('.', '.')]

isspace()

是否为空白字符(空格、换行符、制表符)

isupper()、islower()

是否为大写字母;是否为小写字母

切片

字典,集合,无序,不支持下标操作。具有惰性求值特点的也不支持下标操作。

切片也适用于字符串,但仅限于读取其中的元素,不支持字符串修改。

支持下标操作,支持随机访问,列表(可变)、元组、字符串(不可变)

>'Explicit is better than implicit.'[:8]
'Explicit'
>'Explicit is better than implicit.'[9:23]
'is better than'

compress()、decompress()

python标准库zlib中提供的compress()和decompress()函数可以用于数据的压缩和解压缩,在压缩字符串之前需要先编码为字节码

>import zlib
>x='Python程序设计系列图书,董付国编著,清华大学出版社'.encode()       #字符串转化为字节串,默认UTF-8
>len(x)                #UTF-8:英文占1个字节,中文一个占3个字节
72


>y=zlib.compress(x)                #压缩
>len(y)                #长度更大了,字符串没有什么重复的信息
83


>x=('Python系列图书'*3).encode()
>len(x)
54

>y=zlib.compress(x)                #信息重复度越高,压缩比越大
>len(y)
30


>z=zlib.decompress(y)                #解压缩
>len(z)
54


>z.decode()                #解码
'Python系列图书Python系列图书Python系列图书'

>x=['董付国']*8                #x是一个列表,不能直接压缩,先转换,然后编码
>y=str(x).encode()
>len(y)
104


>z=zlib.compress(y)
>len(z)
26


>zlib.decompress(z).decode()
"['董付国', '董付国', '董付国', '董付国', '董付国', '董付国', '董付国', '董付国']"

4.1.3字符串常量

python标准库string中定义数字字符、标点符号、英文字母、大写字母、小写字母等常量。

>import string
>string.digits                #.digits常量包含了所有数字字符
'0123456789'


>string.punctuation        #.punctuation是一些标点符号
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'


>string.ascii_letters        #.ascii_letters:所有的英语字母大写+所有的英语字母小写
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'


>string.ascii_lowercase        #.ascii_lowercase:所有小写字母
'abcdefghijklmnopqrstuvwxyz'


>string.ascii_uppercase        #.ascii_uppercase:所有大写字母
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

随机密码生成原理

>import string
>x=string.digits+string.ascii_letters+string.punctuation        #数字+大小写字母+标点符号
>x
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

>import random
''.join([random.choice(x) for i in range(8)])                #生成的密码长度8
'EaJ)h"N<'
''.join([random.choice(x) for i in range(8)])
'?^0Y:3/<'
''.join([random.choice(x) for i in range(8)])
"'vP-&-0w"
''.join([random.choice(x) for i in range(8)])
']\\aXjIRL'

4.1.4可变字符串

在python中,字符串属于不可变对象,不支持原地修改,如果需要修改其中的值,只能重新创建一个新的字符串对象。然而,如果其中确实需要一个支持原地修改的unicode数据对象,可以使用io.StringIO对象或array模块(数组)。

>import io        #导入io模块
>s="Hello,world"
>sio=io.StringIO(s)        #以字符串为参数,创建一个StringIO对象
>sio.getvalue()                #创建好的对象有一个方法是.getvalue(),查看里面你的内容是什么
'Hello,world'

>sio.seek(7)        #.seek:找到字符串下标为7的位置
7
>sio.write("there!")        #在位置7的位置写there!
6                                 #返回的是我们成功的写入了几个字符

>sio.getvalue()
'Hello,wthere!'


>import array                #数组,array模块

#array模块中有一个array类
>a=array.array('u',s)       #首先创建一个数组对象,初始化(类型,原始数据)
>print(a)
array('u', 'Hello,world')                #a是array对象

>a[0]='y'                #数组是可变的,直接修改
>print(a)
array('u', 'yello,world')

>a.tounicode()        #生成unicode字符串
'yello,world'

4.1.5字符串应用案例精选

例4-1

编写函数实现字符串加密和解密,循环使用指定密钥,采用简单的异或运算法。

#编写函数实现字符串加密和解密,循环使用指定密钥,采用简单的异或运算法。
#异或:A^B^B=A;1^1=0^0=0;1^0=0^1=1
def crypt(source,key):  #传入的参数(明文,密钥)#itertool标准库中有cycle类from itertools import cycleresult=''   #空字符串temp=cycle(key) #对密钥创建一个cycle对象,首尾相接;可迭代的对象for ch in source:#对明文每个,ord(ch):首先算出ascii码#ord(next(temp))获取cycle可迭代对象的下一个字符,算出ascii码#两个数字才能进行异或运算,两个字符不行#chr:数字变字符result=result+chr(ord(ch)^ord(next(temp)))return resultsource='Shandong Institute of Business and Technology'
key='Dong FuGuo'print('Before Encrypted:'+source)
encrypted=crypt(source,key)
print('After Encrypted:'+encrypted)
decrypted=crypt(encrypted,key)
print('After Decrypted:'+decrypted)

例4-2

编写程序,生成大量随机信息,这在需要获取大量数据来测试或演示软件功能的时候非常有用,不仅能真实展示软件功能或算法,还可以避免泄露真实数据或是引起不必要的争议。

P32、33、34、35、36

Python字符串与正则表达式1:字符串编码与格式化_哔哩哔哩_bilibili

Python字符串与正则表达式2:字符串方法1_哔哩哔哩_bilibili

Python字符串与正则表达式3:字符串方法2_哔哩哔哩_bilibili

Python字符串与正则表达式4:字符串方法3_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构与算法初学者指南】【冲击蓝桥篇】String与StringBuilder的区别和用法

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

docker打包当前dinky项目

以下是我的打包过程&#xff0c;大家可以借鉴。我也是第一次慢慢摸索&#xff0c;打包一个公共项目&#xff0c;自己上传。 如果嫌麻烦&#xff0c;可以直接使用我的镜像&#xff0c;直接跳到拉取镜像&#xff01; <可以在任何地方的服务器进行拉取> docker打包当前din…

LLMs之Gemma:Gemma(Google开发的新一代领先的开源模型)的简介、安装、使用方法之详细攻略

LLMs之Gemma&#xff1a;Gemma(Google开发的新一代领先的开源模型)的简介、安装、使用方法之详细攻略 导读&#xff1a;此文章介绍了Google推出的新一代开源模型Gemma&#xff0c;旨在帮助研发人员负责任地开发AI。 背景&#xff1a; >> Google长期致力于为开发者和研究人…

Vue(学习笔记)

什么是Vue Vue是一套构建用户界面的渐进式框架 构建用户界面&#xff1a; 基于数据渲染出用户可以看到的界面 渐进式&#xff1a; 所谓渐进式就是循序渐进&#xff0c;不一定非得把Vue中的所有API都学完才能开发Vue&#xff0c;可以学一点开发一点 创建Vue实例 比如就上面…

猫头虎分享已解决Bug || ImportError: Keras requires TensorFlow 2.2 or higher

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

openai sora 只能根据文本生成视频?不,TA 是通用物理世界模拟器

视频生成模型作为世界模拟器 我们探索了在视频数据上进行大规模生成模型的训练。 具体来说&#xff0c;我们联合在可变持续时间、分辨率和长宽比的视频和图像上训练文本条件扩散模型。 我们利用了一个在视频和图像潜在编码的时空补丁上操作的变压器架构。 我们最大的模型So…

C++的string容器->基本概念、构造函数、赋值操作、字符串拼接、查找和替换、字符串比较、字符存取、插入和删除、子串

#include<iostream> using namespace std; #include <string> //string的构造函数 /* -string(); //创建一个空的字符串 例如: string str; -string(const char* s); //使用字符串s初始化 -string(const string& str); //使…

Leetcode 209.长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 示例 1&#xff1a; 输入&…

Linux基础命令-文件管理

目录结构 1.存放命令相关的目录 /bin #普通用户使用的命令 /bin/ls, /bin/date /sbin #管理员使用的命令 /sbin/service2.存放用户相关数据的家目录 /home #普通用户的家目录, 默认为/home/username /root #超级管理员root的家目录, 普通用户无权操作3.系统文件目录 /usr #相当…

《TCP/IP详解 卷一》第3章 链路层

目录 3.1 引言 3.2 以太网 3.3 全双工 省点 自动协商 流量控制 3.4 网桥和交换机 3.5 WiFi 3.6 PPP协议 3.6.1 PPP协议流程 3.7 环回 3.8 MTU和路径MTU 3.9 隧道基础 3.9.1 GRE 3.9.2 PPTP 3.9.3 L2TP 3.10 与链路层相关的攻击 3.11 总结 3.1 引言 城域网&…

132 Linux 系统编程9 ,IO操作,lseek 函数,truncate函数,查看文件的表示形式

一 lseek 函数 函数说明&#xff1a;此函数用于文件偏移 Linux中可使用系统函数lseek来修改文件偏移量(读写位置) 每个打开的文件都记录着当前读写位置&#xff0c;打开文件时读写位置是0&#xff0c;表示文件开头&#xff0c;通常读写多少个字节就会将读写位置往后移多少个字…

ai数字仿真辩论主持人提升用户体验

Ai虚拟主持人是元宇宙和AI人工智能技术在播音主持行业的重要应用&#xff0c;AI虚拟主持人能极大提升新闻资讯内容的精准度&#xff0c;改变单一的播报形式。 首先&#xff0c;AI虚拟主持人极大地提升了节目的制作效率和灵活性。传统主持人需要花费大量时间进行彩排和录制&…

Jmeter之内置函数__property和__P的区别

1. __property函数 作用 读取 Jmeter 属性 语法格式 ${__property(key,var,default)} 参数讲解 小栗子 ${__property(key)} 读取 key 属性如果找不到 key 属性&#xff0c;则返回 key&#xff08;属性名&#xff09; ${__property(key,,default)} 读取 key 属性如果找不到 k…

Python:函数

目录 前言&#xff1a; 一、函数的定义 二、函数的调用 三、函数的分类 四、全局变量和局部变量 五、函数的参数 5.1 位置参数 5.2 默认值参数 5.3 可变参数 5.4 关键字参数 5.5 命名关键字参数 5.6 参数的组合 六、函数的递归 前言&#xff1a; 函数就是一个过程…

ETL:数据转换与集成的关键过程

ETL&#xff1a;数据转换与集成的关键过程 在现代数据驱动的世界中&#xff0c;有效地管理和处理数据对于企业的成功至关重要。ETL&#xff08;提取、转换、加载&#xff09;是一种关键的数据处理过程&#xff0c;有助于将数据从源系统提取、清洗、转换并加载到目标系统中&…

学习JAVA的第二天(基础)

目录 基本概念 关键字 class关键字 字面量 练习 变量 定义格式 变量使用 数据类型 基本数据类型 标识符 命名规则 键盘录入 1.导包 2.创建对象 3.接受数据 运算符 算术运算符 练习 隐式转换&#xff08;自动类型提升&#xff09; 强制转换 自增自减运算符 …

【网络编程】okhttp源码解析

文章目录 配置清单框架结构解析 配置清单 首先了解一下okHttp的配置清单&#xff1a; Dispatcher dispatcher &#xff1a;调度器&#xff0c;⽤于调度后台发起的⽹络请求&#xff0c;有后台总请求数和单主机总请求数的控制。List<Protocol> protocols &#xff1a;⽀持…

PostgreSQL 实体化视图的使用

上周的教程中&#xff0c;通过 DVD Rental Database 示例&#xff0c;让我们了解了在 PostgreSQL 中创建实体化视图的过程。正如我们所了解的&#xff0c;PostgreSQL 实体化视图提供了一种强大的机制&#xff0c;通过预计算和存储查询结果集为物理表来提高查询性能。接下来的内…

leetcode刷题日志-98.验证二叉搜索树

思路&#xff1a;根据二叉搜索树的性质&#xff0c;中序遍历满足升序。那么我们就可以使用中序dfs&#xff0c;并且记录每个节点的前一个节点的值&#xff0c;如果前一个节点值比后一个大&#xff0c;返回false。 class Solution {Integer pre null; //记录前序节点boolean …

2.23数据结构

单向循环链表 创建单向循环链表&#xff0c;创建节点 &#xff0c;头插&#xff0c;按位置插入&#xff0c;输出&#xff0c;尾删&#xff0c;按位置删除功能 //main.c #include "loop_list.h" int main() {loop_p Hcreate_head();insert_head(H,12);insert_head(…