一.字符串的应用
1.查找字符串里的单个字符
其中的字符串,可以理解为一个数组,从开始的第一个字符可以视为数组的第一个元素。这样就可以使用s[i]来表示串中的字符位置(从0到i依次查找),应为python是从左到右的顺序识别的,而s[-1]的话,就反过来,找最后一个字符。同意s[-2]是右边的第2个字符。
s1 = 'This is string'
s2 = "This is a dog"
print(s1,s2)
print(s1[0])
print(s2[-1])
结果
This is string This is a dog
T
g
2.slice:字符串的“切片”。查找连续的几个字符,或者字符串中的一段字符串.也是类比数组查询:s[0:i] .查询字符串的第一个第i-1个字符。
注意:这个的切片区间 [ ] 是左闭右开类型。eg:
s = "python_learning"
print(s[0 : 3])
运行结果是:pyt ;在这里,依然可以查找单个字符的方法去给切片定位,从左到右是0到i,从右到左是-1到 -i.
s = "python_learning"
print(s[0 : 3])
print(s[0 : -1])
print(s[0 : -3])
print("1")
print(s[-1:-3])
print(s[-3:-1])
运行结果:
pyt
python_learnin
python_learn
1
in
“python_learning”是15个字符,0到-3是打印从第一个字符到最后一个字符减3的字符串,而为什么[-3 :-1] 就不行呢?
因为python是从左到右识别的,如果-1到-3就是从最后减1个字符到减3个字符,但程序只走一遍。从左到右,所以只要定位的第一个位置在第二个位置后面,这就无效。
也可以这样写:s[ : ]查找全部 ; “:”号左右,左边不填就代表从0 ,右边不填就代表到最后一个。
print(s[ : 6])
print(s[ : ])
运行结果:
python
python_learning
除此之外,slice切片还具有按位查找的方式 print(s[ x1 : x2 : x3]) 从x1到x2中每隔x3位取一个字符
print(s[0 : 8 : 2])
print(s[0 : 9 : 3])
运行结果:
pto_
ph_
3.获取长度: length = len(s)
- 删除标记字符,并使其分裂。在一个列表中显示出来。string.split(‘’) ;
s = "python_learning"
string = 'C: \ Users \ Administrator \ Desktop'
print(s.split('_'))
print(string.split(" \ "))
运行结果:
['python', 'learning']
['C:', 'Users', 'Administrator', 'Desktop']
5.删除字符 string.strip() 括号里填上需要删除的字符或者字符串
s = "python_learning"
print(s.strip('p'))
print(s.strip('python'))
运行结果:
ython_learning
_learning
注意:在所有string字符串操作的函数,都是以string.函数名的方式进行运行。
二.序列类型的运用
1.list列表
像 a = [x1, x2, x3,…,xn] 这类的就是列表,在python在,代码相对比其他代码来说,很灵活。就是len求长度的公式,直接在print(len(a)).
列表也可以进行加法和乘法,得到的是一个新的大列表。
a = [1, 2, 3, 4]
b = [9, 8, 7, 6]
print(len(a))
print(a + b)
print(a * 2)
print(a * b)
运行结果:
4
[1, 2, 3, 4, 9, 8, 7, 6]
[1, 2, 3, 4, 1, 2, 3, 4]
Traceback (most recent call last):
File "G:/Python/wenjian/lesson_1/if.py", line 7, in <module>
print(a * b)
TypeError: can't multiply sequence by non-int of type 'list'
报错:列表不能乘以非整数的‘list’类型,简单说就是不支持这种乘法操作,只能乘以整数。
(1) 同样,列表有和字符串相似的地方,也可以查询列表内的数据,对列表里的数据进行index检索。
还可以sliceqie切片进行查找。
a = [1, 2, 3, 4]
print(a[0])
print(a[-1])
print(a[0 : 2])
print(a[0 : 4 : 2]) #同上,打印第1位到底4位的(可以理解为数组0到3)列表元素,并每隔2位取1一个元素
运行结果:
1
4
[1, 2]
[1, 3]
(2)list列表的增加和删除
list.append(x) 在列表后面增加一个元素;list.insert(x1,x2) 在列表第X1-1(数组思维,第一个元素从0开始)位,增加X2这个元素
a = [1, 2, 3, 4]
a.append(4)
print(a)
a.insert(3, 6)
print(a)
运行结果:
[1, 2, 3, 4, 4]
[1, 2, 3, 6, 4, 4]
list.pop(x) 删除列表的第x-1位的元素 list.remove(x) 删除列表中的X元素
a = [1, 2, 3, 4]
a.pop(0)
print(a)
a.insert(0,1)
print(a)
a.remove(2)
print(a)
运行结果:
[2, 3, 4]
[1, 2, 3, 4]
[1, 3, 4]
(3)列表的嵌套
在列表内,一个列表可以嵌套一个列表的。eg a = [1, 2, 3, [‘pig’, ‘dog’, 4]]
那么如何让他打印出来呢?是不是也像C语言中的二维数组一样的模拟呢?
a = [1, 2, 3, ['pig', 'dog', 4]]
print(a[1])
print(a[3][0]) # 查找a列表的第4个列表元素的第1个元素
print(a[3][2])
c = a[3]
print(c[1]) #也可以像C语言那样,让它等价。
print(c[-1])
运行结果:
2
pig
4
dog
4
从代码中看的出,可以像理解C语言中的二维数组的方式去对他进行理解和操作。
(4)str.index(str, beg=0, end=len(string)) 字符串内检索
str – 指定检索的字符串
beg – 开始索引,默认为0。
end – 结束索引,默认为字符串的长度。
返回值:如果包含子字符串返回开始的索引值,否则抛出异常。
a ="My name is xxx"
b = "Mynameisxxx"
print (a.index('xxx'))
print(b.index('xxx'))
c = 'name'
length = int(len(a))
print(a.index(c, 0, length));
运行结果:
11
8
3
(5)元组tuple的打包和解包使用单星号(*),字典dictionary的打包和拆解使用(**)
a, *b, c = [1, 2, 'a', [3, 4], 100]
print(a)
print(b)
print(c)
运行结果:
1 [
2, 'a', [3, 4]]
100
b是可以打印多个任意的非关键字参数,并将收集到的参数转换成一个元组。
同样,如果传参数进入子函数,那么()可以解压传送的参数。
(6)复制一个列表
如果是直接赋值
a = [0, 1, 2, 3, 4]
b = a
b[0] = 88
print(b)
print(a)
运行结果:
[88, 1, 2, 3, 4]
[88, 1, 2, 3, 4]
因为a,b指向的是同一块内存。改变b,a就会改变。
所以我们用slice切片的形式来进行赋值,将他从新切割成一个新的列表。
a = [0, 1, 2, 3, 4]
b = a[ : ]
b[0] = 88
print(b)
print(a)
运行结果:
[88, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
2.range范围函数
a = list(range(10))
print(a)
b = list(range(0,10,2))
print(b)
运行结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8]
可以看到,range是按顺序从0-n去除n+1个数。range(n)
同样,range还具有筛选的功能,比如上面,就删去0-10所有的奇数。
range(x1,x2,c) 是从x1到x2的数中,每隔C位取一个数。
3.元组tuple
元组是用()表示,eg: tuple = (1, 2, 3)
元组类型是定义后,下面任何修改元组元素都将无效。就像C语言的const。只能访问,不能进行修改。
a = (1, 2, 3)
print(type(a))
print(a[0])
a[1] = 4
print(a[1])
运行结果:
Traceback (most recent call last):
File "G:/Python/wenjian/lesson_1/if.py", line 6, in <module>
a[1] = 4
TypeError: 'tuple' object does not support item assignment #tuple元组不支持他的元素赋值
<class 'tuple'>
1
三.dictionary字典类型
dictionary是基于相互含义对应并且元素一样的两个或者两个以上的列表储存的数据。
key = ['name', 'from','high']
value=['xiaoming', 'china','178']
string = value[key.index('from')]
print(string)
这是用index函数实现的。基于这个变幻,我们可以引入键值对 key : value。也是我们的字典类型,就可以理解为C语言的结构体。
dictionary = {x1, x2, x3, x4, x5,… , xn } 字典类型是用{}括号表示。
d = {"old" : "18", "sex" : "gril", "wight" : "50", "hight" : 175}
print(type(d))
print(d["old"])
print(d["hight"])
d["old"] = 15 #更改数据
print(d)
d["name"] = "Zhang" #添加数据,不过是在最后就添加
print(d)
d[3] = 5
print(type(d[3]))
d.pop("old")
print(d)
d.pop(3) #删除数据
print(d)
运行结果:
<class 'dict'>
18
175
{'old': 15, 'sex': 'gril', 'wight': '50', 'hight': 175}
{'old': 15, 'sex': 'gril', 'wight': '50', 'hight': 175, 'name': 'Zhang'}
<class 'int'>
{'sex': 'gril', 'wight': '50', 'hight': 175, 'name': 'Zhang', 3: 5}
{'sex': 'gril', 'wight': '50', 'hight': 175, 'name': 'Zhang'}