字符串
字符串是以单引号或者双引号括起来的任意文本,一个字符串由若干个任意字符组成。
-
字符串的输出(拼接)
- print(str1 + str2)
- print(str1, str2)
- print("%s %s" %(str1, str2))
- print("{} str3 {}".format(str1, str2)) 现在流行用.format取代%s
- join()函数
list = [“str1”, “str2”, “str3”]
print(“str4”.join(list))
str4str1 str2 str3 - 字符的重复输出 :str1*n
print(“str”*50)
-
字符串的截取
str1[start:stop:step]
参数一:从start开始取 默认0
参数二:到stop结束, stop取不到,默认len(str1)
参数三:步长 默认1 可以为负
- 下标索引【】 str1[0]
- 取值范围【0,len(str1)】
- 索引可以为负数,可从-1开始,-1表示倒数第一个字符
- e.g.
str1 = “hello world”
str1[start: stop :step]
str1[ : : -1] 倒序输出字符串
str1[ : 3 :-1] dlrow o (倒序输出至下标3)
str1[ 3 : : -1] lleh 从下标开始输出字符串,步长为-1(从下角标3开始往前输出)
(注意):
左对齐: %-05d 左对齐不会补“0”
右对齐:%05d -
字符串常用函数
- eval(str)
功能:将字符串str当成有效的表达式来求值并返回计算结果。
可以把list,tuple,dict, set和string相互转化
其实就是提取“”(引号)中间的内容
>>>num1 = eval('123')
>>>print(num1)
123
>>>num2 = eval("[1, 2, 3]")
>>>print(num2)
[1, 2, 3]
>>> num3 = eval("12-3")
>>> print(num3)
9
将字符串转成list: str(x)
e.g.
list1 = ["hello","world"]
str2 = str(list)
-
len(str)
功能:返回当前字符串的长度(计算字符串长度) -
str.lower() 大写转小写
-
str.upper() 小写字母转换为大写字母
-
str.swapcase()
把字符串中的大写字母转为小写字母,小写字母转换为大写字母
>>> str = "Hello World"
>>> print(str.swapcase())
hELLO wORLD
- str.capitalize()
返回一个首字母大写,其他小写的字符串
>>> str = "Hello World"
>>> print(str.capitalize())
Hello world
- str.title()
返回一个每个单词首字母大写的字符串
>>> str = "Hello World"
>>> print(str.title())
Hello World
- str.center(width[, fillchar])
功能:返回一个指定宽度的居中字符串,fillchar为填充的字符,默认使用空格
>>> str = "Hello World"
>>> print(str.center(50,"*"))
*******************Hello World********************
- str.ljust(width[, fillchar])
功能:返回一个指定宽度的左对齐字符串,fillchar为填充字符。默认使用空格填充
>>> str = "Hello World"
>>> print(str.ljust(50,"*")) 注意:“*”只能是一个字符
Hello World***************************************
- str.rjust(width[, fillchar])
功能:返回一个指定宽度右对齐字符串,fillchar为填充字符,默认使用空格填充
>>> str = "Hello World"
>>> print(str.rjust(50,"*"))
***************************************Hello World
- str.zfill(width)
功能:返回一个长度为width字符串,原字符串右对齐,前面补0
>>> str = "Hello World"
>>> print(str.zfill(50))
000000000000000000000000000000000000000Hello World
- str.count(str 【,start】【, end】)
功能:返回字符串中str出现的次数,可以指定一个范围,若不指定则默认从头到尾,匹配的时候是区分大小写的。
>>> str1 = "Hello World"
>>> print(str1.count("hello", 0 , 10))
0
- str.find(str1【, start】【, end】)
功能:从左到右检测str1字符串是否包含在字符串中,可以指定范围,默认从头到尾。
返回的是第一次出现的开始的下标,若未查询到,则返回-1
>>> str = "Hello World"
>>> str1 = "llo"
>>> print(str.find(str1, 0 , 10))
2
- str.rfind(str1【, start】【, end】)
功能:类似于str.find(),不过是从右边开始查找
>>> str = "Hello World"
>>> str1 = "llo"
>>> print(str.rfind(str1, 0 , 10))
2
- str.index(str1[, start = 0] ,[ end = len(str)])
功能:类似于find(),与find() 不同的是,如果str1不存在的时候会报一个异常
>>> str2 = "Hello World"
>>> str1 = "hello"
>>> print(str2.index(str1, 0 , 10))
ValueError: substring not found
- str.lstrip()
功能:截掉字符串左侧指定的字符串,则默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')
>>> str = '**** you are very good'
>>> print(str.lstrip())
**** you are very good
>>> print(str.lstrip("*"))
you are very good
- str.rstrip()
功能:截掉字符串右侧指定的字符串,则默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')
>>> str = '**** you are good****'
>>> print(str.rstrip())
**** you are good****
>>> print(str.rstrip("*"))
**** you are good
- str.strip()
功能:截掉字符串左右两侧指定的字符串,则默认删除空白符(包括’\n’, ‘\r’, ‘\t’, ’ ')
>>> str1 = " hello world "
>>> str1.strip()
'hello world'
- string.split(str="", num=string.count(str))
功能:以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串
str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。 num – 分割次数
>>> str1 = "hello you are good"
>>> str1.split()
['hello', 'you', 'are', 'good']
>>> str1.split(" ",2)
['hello', 'you', 'are good ']
list列表
-
本质:list列表的本质是一种有序的集合
有序:能用下标索引 -
创建:在列表中元素的数据类型可以不同(灵活性)
list3 = [33, “good”, True, 10.32]
print(list3) -
列表元素的访问
列表的取值
功能:访问list列表中元素值
语法:列表名[索引]
list4 = [22, 33, 12, 32, 45]
#下标从0开始,最大值为len(list4)-1
print(list4[0])
注意:当索引值大于len(list4)-1的时候,会出现以下错误:
print(list4[5])
IndexError: list index out of range
这个错误就是下标越界【下标超出了可表示的范围】
3.2 列表元素的替换
功能:更改列表元素的值
语法:列表名[下标] = 值
list4 = [22, 33, 12, 32, 45]
list4[0] = "hello"
print(list4[0])
4.列表函数
- list.append(元素/列表)
功能:在列表中末尾添加新的元素【在原本的列表中追加元素】
注意:append()中的值可以是列表也可以是普通元素
>>> list1 = [3, 4, 6]
>>> list1.append(6)
>>> print(list1)
[3, 4, 6, 6]
- list.extend(列表)
功能:在列表的末尾一次性追加另外一个列表中的多个值
注意:extend()中的值只能是列表/元组[一个可迭代对象],不能是元素
>>> list1 = [1,2,3]
>>> list2 = [3, 4,5]
>>> list1.extend(list2)
>>> print(list1)
[1, 2, 3, 3, 4, 5]
- list.insert(下标值, 元素/列表)
功能:在下标处插入元素,不覆盖原本的数据,原数据向后顺延
注意:插入的数据可以是元素也可以为列表
>>> list1 = [1,2,3]
>>> list1.insert(1,0)
>>> print(list1)
[1, 0, 2, 3]
>>> list1.insert(1,[2, 4, 8])
>>> print(list1)
[1, [2, 4, 8], 0, 2, 3]
- list.pop(下标值)
功能:移除列表中指定下标处的元素(默认移除最后一个元素),并返回移除的数据
>>> list1 = [1, [2, 4, 8], 0, 2, 3]
>>> list1.pop()
3
>>> print(list1)
[1, [2, 4, 8], 0, 2]
>>> list1.pop(2)
0
>>> print(list1)
[1, [2, 4, 8], 2]
- list.remove(元素)
功能:移除列表中的某个元素第一个匹配结果
>>> list1 = [1, 2, 3]
>>> list1.remove(2)
>>> print(list1)
[1, 3]
- list.clear()
功能:清除列表中所有的数据
>>> list1 = [1, 2, 3]
>>> list1.clear()
>>> print(list1)
[]
- list.index(object[, start】[, stop])
功能:从指定的范围的列表中找出某个值第一匹配的索引值
若不指定范围,则默认是整个列表。
>>> list1 = [1, 2, 3]
>>> list1.index(2)
1
>>> list1.index(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 4 is not in list
注意:若在列表中找不到这个元素,则会报错。
- list.count(元素)
功能:查看元素在列表中出现的次数
>>> list1 = [1, 2, 3, 1]
>>> list1.count(1)
2
- len(list)
功能: 获取元素列表个数
>>> list1 = [1, 2, 3, 1]
>>> len(list1)
4
- max(list)
语法:获取列表中的最大值
>>> list1 = [1, 2, 3, 1]
>>> max(list1)
3
- min(list)
语法:获取列表中的最小值
>>> list1 = [1, 2, 3, 1]
>>> min(list1)
1
- list.reverse()
语法: 列表倒叙
>>> list1 = [1, 2, 3, 1]
>>> list1.reverse()
>>> print(list1)
[1, 3, 2, 1]
- list.sort()
语法:列表排序 默认升序
>>> list1 = [1, 2, 3, 1]
>>> list1.sort()
>>> print(list1)
[1, 1, 2, 3]
三种拷贝
1. 赋值拷贝/引用拷贝
地址相同,会相互影响
语法:list1 = [1, 2, 3]
list2 = list1
>>> list1 = [1, 2, 3, 1]
>>> list2 = list1
>>> print(list2)
[1, 2, 3, 1]
>>> print(id(list1))
4314476424
>>> print(id(list2))
4314476424
2. 浅拷贝
不完全内存拷贝: list2 = list1.copy()
语法:list1 = [1, 2, 3]
list2 = list1.copy()
>>> list1 = [1, 2, 3, 1]
>>> list2 = list1.copy()
>>> print(list2)
[1, 2, 3, 1]
>>> print(id(list2))
4314525320
>>> print(id(list1))
4314524808
注意:浅拷贝为一维内存拷贝,开辟了新的内存空间
**但是只对一维数组“深拷贝”**二维数组仍指向同一个内存地址
3. 深拷贝
完全内存拷贝 内存地址不同,互不影响
导入“copy”头文件: import copy
list2 = copy.deepcopy(list)