string 字符串

string 字符串

字符串是 Python 中最常用的数据类型。我们可以使用引号( " )来创建字符串。

创建字符串很简单,只要为变量分配一个值即可

1. 创建字符串
str1 = 'Hello World!'
str2 = "Runoob"
print(str1)
print(str2)

#输出重复字符串
str3 = str2 * 3
print(str3)
2. 字符串连接
# 输出 Hello World!
str1 = 'Hello'
str2 = 'World'

"""
方式:+ 连接
使用这种方式进行字符串连接的操作效率低下,因为python中使用 + 拼接两个字符串时会生成一个新的字符串,生成新的字符串就需要重新申请内存,当拼接字符串较多时自然会影响效率
"""
str3 = str1 + " " + str2 + "!"
print(str3)

"""
方式:通过str.format()方法拼接
通过这种方式拼接字符串需要注意的是字符串中{}的数量要和format方法参数数量一致,否则会报错
"""
str4 = "{} {}!".format(str1, str2)
print(str4)

"""
方式:通过(%)操作符拼接
这种方式与str.format()使用方式基本一致。
"""
str5 = '%s %s!' % (str1, str2)
print(str5)

"""
方式:通过()多行拼接
遇到未闭合的小括号,自动将多行拼接为一行
"""
str6 = (
    "Hello"
    " "
    "World"
    "!"
)
print(str6)

"""
方式:通过F-strings拼接
在python3版本中,提出一种新型字符串格式化机制,被称为“字符串插值”或者更常见的一种称呼是F-strings,F-strings提供了一种明确且方便的方式将python表达式嵌入到字符串中来进行格式化
"""
str7 = f'{s1} {s2}!'
print(str7)

# 注意:F-strings的运行速度很快,比%-string和str.format()这两种格式化方法都快得多。
3. 访问字符串(切片)
  • 访问字符串中的某个字符

    var1 = 'Hello World!'
    s1 = var1[0]
    s2 = var1[1]
    s3 = var1[2]
    s4 = var1[-1]
    print ("第一个字母 ", s1)
    print ("第二个字母 ", s2)
    print ("第三个字母 ", s3)
    print ("最后一个字母",s4)
    
  • 截取字符串中的一部分

    str = '0123456789# 简单截取
    print(str[1:5])    # 从头开始截取到给定下标之前
    print(str[:4])     # 从头开始截取到给定下标之前
    print(str[6:])     # 从给定下标开始截取到结尾
    print(str[:])      # 截取字符串的全部字符
    
    # 步长
    print(str[0:7:2])  # 隔一个取一个
    
    # 较复杂,适情况而定
    print(str[:-3])    # 截取从头开始到倒数第三个字符之前
    print(str[::-1])   # 创造一个与原字符串顺序相反的字符串
    print(str[-3:-1])  # 截取倒数第三位与倒数第一位之前的字符
    print(str[-3:])    # 截取倒数第三位到结尾
    print(str[:-5:-3]) # 逆序截取
    
4. 格式化输出
age = 18
name = "zhangsan"
weight = 113.2459
height = 172.89

# %d 放一个整型  %s 放一个字符串型  %f 放一个浮点型 %.nf 保留n位小数浮点型   占位符
print("姓名: ", name, "年龄: ", age, "身高: ", height)
print("姓名: %s 年龄: %d  身高: %f 体重:%.2f" % (name, age, height, weight))
5. 转义符

在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符

# \(在行尾时)     续行符
long_string = "Prints the values to a stream, or to sys.stdout by default. file:\
a file-like object (stream); defaults to the current sys.stdout."
print(long_string)

# \n             换行符
long_string = "Prints the values to a stream, or to sys.stdout by default. file:\n a file-like object (stream); defaults to the current sys.stdout."
print(long_string)

# \t              制表符(表示4个空格)
str = "hello\tword"
print(str)

# \\             反斜杠符号
long_string = "Prints the values to a stream, or to sys.stdout by default. file:\\n a file-like object (stream); defaults to the current sys.stdout."
print(long_string)

# r""             批量转义
str = r"hello\tworld\nhello\tworld"
print(str)

# \'             转义单引号
str = 'hello \'word\' !'
print(str)

# \"             转义双引号
str = "hello \"word\" !"
print(str)
6. 常用函数
(1) 取字符串长度

len(str) str为要获取长度的字符串

str = "hello"
print(len(str))
>>5
(2) 字符串出现次数

count(string, [start], [end]) 返回字符串中string出现的次数,可以指定范围,不写范围默认从头到尾。

# 无范围查询
s = "duanbaba is very very good man"
very_count = s.count("ba")
print(very_count)

# 指定范围查询
very_count = s.count("ba", 6, 50)
print(very_count)
(3) 去除头尾字符

strip: 用来去除头尾字符、空白符(包括\n、\r、\t、’ ‘,即:换行、回车、制表符、空格)
lstrip:用来去除开头字符、空白符(包括\n、\r、\t、’ ‘,即:换行、回车、制表符、空格)
rstrip:用来去除结尾字符、空白符(包括\n、\r、\t、’ ',即:换行、回车、制表符、空格)

*注意:*这些函数都只会删除头和尾的字符,中间的不会删除。

用法分别为:
string.strip([chars])
string.lstrip([chars])
string.rstrip([chars])

*注意:*它返回的是去除头尾字符(或空白符)的string副本,string本身不会发生改变。

  • 当chars为空时,默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')
s = "  hoqell  oAS d  "
print(s)

# 去除头尾
print(s.strip())

#从左侧去除
print(s.lstrip())

#从右侧去除
print(s.rstrip())
  • 当chars不为空时,函数会被chars解成一个个的字符,然后将这些字符去掉。
str2 = '1a2b12c21'
str2.strip('12') #删除头尾的1和2
>> 'a2b12c'
str2.lstrip('12') #删除开头的1和2
>> 'a2b12c21'
str2.rstrip('12') #删除结尾的1和2
>> '1a2b12c'
(4) 字符串大小写转换
  • upper 全部转换为大写
  • lower 全部转换为小写
  • title 转换为标题(每个单词首字母大写)
  • capitalize 首字母大写
  • swapcase 大写变小写,小写变大写
s = 'hEllo pYthon'
print(s.upper())
print(s.lower())
print(s.title())
print(s.capitalize())
print(s.swapcase())
(5) 字符串判断
  • islower 检测字符串是否只含有小写字母
  • isupper 检测字符串是否只含有大写字母
  • istitle 检测字符串是否是标题(每个单词首字母大写)
  • isspace 检测字符串是否只含有空格
  • isalnum 检测字符串是否只由数字和字母组成
  • isalpha 检测字符串是否只由字母组成
  • isdigit 检测字符串时候只由数字组成
  • isnumeric 检测字符串时候只由数字组成
  • startswith 判断字符串的开头字符,也可以截取判断
  • endswith 判断字符串的开头字符,也可以截取判断
s = 'hEllo pYthon'
print(s.isupper())
print(s.islower())
print(s.istitle())
print(s.isspace())
print(s.isalnum())
print(s.isalpha())

# 都是检测是否由数字组成,区别是isnumeric()中文数字也认为是数字
s = "123"
print(s.isdigit())
print(s.isnumeric())
>>True
>>True

s = "123a"
print(s.isdigit())
print(s.isnumeric())
>>False
>>False

s = "一二三"
print(s.isdigit())
print(s.isnumeric())
>>False
>>True

s = "hello"
print(s.startswith("he"))
print(s.endswith("lo"))
(6) 字符串内查找方法

检查str字符串是否包含在字符串中,可以指定范围,默认是从头到尾第一次出现得开始下标,没有返回-1

  • find([str, [start], [end]]) 从左往右
  • rfind([str, [start], [end]]) 从右往左
s = "very good !"
print(s.find('very'))
print(s.rfind('good'))
print(s.find("good", 0, 3))

跟find()用法一样,只不过如果str不存在会报异常

  • index([str, [start], [end]]) 从左往右
  • rindex([str, [start], [end]]) 从右往左
s = "very good !"
print(s.index('very'))
print(s.index('good'))
print(s.index("good", 0, 3))
(7) 字符串内替换

replace(old_string, new_string, count)

用new_string替换old_string,默认是全部替换,如果指定了count,那么只替换前count个

# 全部替换
s = "very good very good very good"
new_s1 = s.replace("good", "nice")
print(new_s1)

# 替换指定个数
new_s2 = s.replace("good", "nice", 1)
print(new_s2)

(8) 字符串分割和组合

split(str, num)

以str为分隔符截取字符串,指定num,则截取num个字符串(很少用num),num默认值为字符串长度

s = "very good very good very good"
# 全部拆分
new_s1 = s.split(" ")
print(new_s1)

# 拆分指定个数
new_s2 = s.split(" ", 3)
print(new_s2)

str.join(seq)

以指定的字符串分隔符str,将seq中的所有元素组成一个字符串

# seq 为字符串
str = " "
seq = "HELLO"
print(str.join(seq))

# seq 为列表
str = "!"
seq = ["hello", "world", "haha"]
print(str.join(seq))
练习题
  • 字符串解析,现有一字符串,“卡巴斯基#杀毒软件#免费版#俄罗斯#”,解析出每个元素。
  • "那车水马龙的人世间,那样地来 那样地去,太匆忙"最后一次出现"那"的位置。
  • 判断输入的字符串是否是 .py 结束
  • 有如下格式的字符串name-age-sex-address,解析出姓名,年龄等信息。
  • 求出字符串"apple is a apple."中有多少种字符,以及每个字符的个数
  • 去掉字符串“i have a apple ”右边的空格
  • 定义一个方法,将str所指字符串的正序和反序进行连接,例如 “ok”->“okko”
  • 自定义5个字符串,求5个字符串中最长的那个,把最长的字符串打印出来
  • 若可以从一个源字符串中, 找到一个相符的字符串(忽略大小写),
    则返回第一个字符的索引位置,否则返回-1。
  • 如下字符串,01#张三#20-02#李四#30-03#王五#40。。。。。。,解析每个人分数多少。样式如下:
    01 张三 20
    02 李四 30
    03 王五 40。并且计算总分。
  • 已知字符串:“this is a test of java”.
    按要求执行以下操作:
    (1) 统计该字符串中字母s出现的次数
    (2) 取出子字符串"test"
    (3) 用多种方式将本字符串复制到一个字符列表中.
    (4) 将字符串中每个单词的第一个字母变成大写, 输出到控制台。
    (5) 用两种方式实现该字符串的倒叙输出。
    (6) 将本字符串转换成一个字符串数组,要求每个数组元素都是一个有意义的额英文单词,
    并输出到控制台
  • 获取一个字符串在另一个字符串中出现的次数
    例如,获取"kk"在"abkkcdkkefkkskk"中出现的次数
  • 获取两个字符串中最大相同子串
    例如找到字符串"abcwerthelloyuiodef"和"cvhellobnm"中的最大相同字串
  • 将每获取到的子串去长串中判断是否包含,如果包含,已经找到!。
  • 给你一组字符串如:iu7i8hy4jnb2,让你编程输出里面的数字:

你可能感兴趣的:(string 字符串)