Python-数据类型-02.字符串

Python-数据类型-字符串

  • 计算机中,一切皆为对象
  • 世界万物,皆为对象,一切对象皆可分类

1.什么是字符串

  • 字符串是一个有序的字符的集合,用于存储和表示基本的文字信息,一对单双或三引号中间包含的内容成为字符串
  • 在 python 中,加了引号的字符就是字符串类型,python 并没有字符类型,类似"hello world"就是一个字符串
  • 注意:不加引号的字符串表示变量:name=jack

2.字符串特点

  • 有序,不可变
  • 字符串是特殊的元组,可以切片

3.字符串的格式化输出

  • 字符串是 %s,整数 %d,浮点数%f
name = "Jack"
print("I am %s,how are you?" %name)
------------------------------
I am Jack,how are you?
------------------------------

4.字符串的拼接和重复输出( + 和 * )

4.1.字符串拼接(相加)

  • 万恶的加号 "+" 问题
a = 'Hello '
b = 'world '
print(a + b)
------------------------------
'Hello world'
------------------------------
  • 注意:只能字符串加字符串,不能字符串加其他类型

  • 注意:字符串相加的效率不高

字符串1+字符串3,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次,
python 中的字符串在 C 语言中体现为一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空间,一旦需要修改字符串,就需要再次开辟空间,
注:此方法又称为 "万恶的加号",因为使用加号连接2个字符串会调用静态函数 string_concat(register PyStringObject *a ,register PyObject * b),在这个函数中会开辟一块大小是 a+b 的内存的存储单元,然后将 a,b 字符串拷贝进去。如果是 n 个字符串相连那么会开辟 n-1 次内存,非常耗费资源

4.2.重复输出字符串(相乘)

  • 注意:只能字符串和字符串 + * 不能跨数据类型
name='jack '
print(name*5)
------------------------------
jack jack jack jack jack
------------------------------

4.3.str.join()连接2个字符串

  • 可指定连接符号
a='hello '
b='####'
print(a.join(b))
------------------------------
#hello #hello #hello #
------------------------------

5.字符串常用方法

5.1.str.count() 字符串统计

msg = 'Hello World'
print(msg.count('o'))
------------------------------
2
------------------------------

5.2.str.strip() 删除字符串两边的指定字符

  • 默认为空格,\t 为 tab,\n 为换行符
msg = '   Hello World   '
print(msg.strip())
------------------------------
Hello World
------------------------------

5.3.str.lstrip() 删除字符串左边的指定字符

  • 默认为空格
msg = '   Hello World   '
print(msg.lstrip())
------------------------------
Hello World   
------------------------------

5.4.str.rstrip() 删除字符串右边指定字符

  • 默认为空格
msg = '   Hello World   '
print(msg.rstrip())
------------------------------
   Hello World
------------------------------

5.5.str.index 和 str.find 查找字符串的索引

  • 功能相同,区别在于 find() 查找失败会返回 -1,不会影响程序运行

  • 一般用 find!=-1 或者 find>-1 来作为判断条件

  • str.index() 检测字符串中是否包含子字符串 str,可指定范围

msg = '   hello world   '
print(msg.index('x'))
print(msg.index('l'))

------------------------------
Traceback (most recent call last):
  File "/python_project/helloworld.py", line 10, in <module>
    print(msg.index('x'))
ValueError: substring not found
------------------------------
# 使用 index 查询字符串索引,如果没有则程序退出,后续代码不执行
  • str.find() 检测字符串中是否包含子字符串 str,可指定范围,常用
msg = '   hello world   '
print(msg.find('l'))
print(msg.find('x'))
------------------------------
5
-1
------------------------------
# l 的索引为 5
# x 的索引找不到返回 -1

5.6.str.len() 计算字符串长度

  • 计算的是索引长度,不是最大的索引数值
msg = 'hello world'
print(len(msg))
------------------------------
11
------------------------------

5.7."str" in | "str" not in 检查目标是否包含指定字符串

msg = 'hello world'
print('hello' in msg)
print('123' in msg)
print('123' not in msg)
------------------------------
True
False
True
------------------------------

5.8.字符串中字母大小写转换

5.8.1.str.lower() # 转换为小写

msg = 'Hello World'
print(msg.lower())
------------------------------
hello world
------------------------------

5.8.2.str.upper() # 转换为大写

msg = 'Hello World'
print(msg.upper())
------------------------------
HELLO WORLD
------------------------------

5.8.3.str.swapcase() # 大小写互换

msg = 'Hello World'
print(msg.swapcase())
------------------------------
hELLO wORLD
------------------------------

5.9.str.center() # 将字符串居中

  • 可指定字符串长度以及两边填充的字符
msg = ' hello world '
print(msg.center(40, '*'))
------------------------------
************* hello world **************
------------------------------

5.10.字符串的测试、判断函数

  • 这类函数在 string 模块中没有,且返回的都是布尔值
str.isdigit()                           # 是否全是数字,并至少有一个字符
str.isalpha()                           # 是否全是字母,并至少有一个字符
str.isspace()                           # 是否全是空白字符,并至少有一个字符
str.isalnum()                           # 是否全是字母和数字,并至少有一个字符
str.islower()                           # Str中的字母是否全是小写
str.isupper()                           # Str中的字母是否全是大写
str.istitle()                           # Str是否是首字母大写的
str.startswith(prefix[ ,start[,end]])   # 是否以prefix开头
str.endswith(suffix[, start[, end]])    # 是否以suffix结尾

6.字符串切片

str = '0123456789'
print(str[0:3])         # 截取第一位到第三位的字符
print(str[:])           # 截取字符串的全部字符
print(str[6:])          # 截取第七个字符到结尾
print(str[:-3])         # 截取从头开始到倒数第三个字符之前
print(str[2])           # 截取第三个字符
print(str[-1])          # 截取倒数第一个字符
print(str[::-1])        # 创造一个与原字符串顺序相反的字符串
print(str[-3:-1])       # 截取倒数第三位与倒数第一位之前的字符
print(str[-3:])         # 截取倒数第三位到结尾
print(str[:-5:-3])      # 逆序截取,截取倒数第五位数与倒数第三位数之间
------------------------------
012
0123456789
6789
0123456
2
9
9876543210
78
789
96
------------------------------
  • 注意:
1)字符串对象是不可改变的,也就是说在 python 创建一个字符串后,你不能把这个字符中的某一部分改变。
2)任何上面的函数改变了字符串后,都会返回一个新的字符串,但是原字串并没有变。
3)字符串是可以通过下标来进行取值的,但是由于字符串是不可变变量,不能通过下标来修改它的值(形式如 str[1] 不可用)
4)下标(索引值)从左边计算,从0开始,最大下标值是字符串长度减 1,即 "len(string) - 1"

拓展:什么是可变和不可变的数据类型:

1.可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典
2. 不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)

posted @ 2017-12-13 20:44  天生帅才  阅读(366)  评论(0编辑  收藏  举报
// 百度统计