-
Notifications
You must be signed in to change notification settings - Fork 0
/
14-高级特性之切片.py
98 lines (86 loc) · 2.65 KB
/
14-高级特性之切片.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
##1******
#取list或tuple元素有很多方法
L=['Michael','Sarah','Tracy','Bob','Jack']
#例:取前三个元素
#笨方法:
print([L[0],L[1],L[2]])
#好一点的循环取:
n=3
r=[]
for i in range(n): #range(3):range(0,3):0,1,2
r.append(L[i])
print(r)
#对这种经常取指定索引范围的操作,用循环十分繁琐
#Python提供了切片(Slice)操作符,能大大简化这种操作。
print(L[0:3]) #一行解决0-3但不包括3
#L[0:3]==L[:3]
print(L[1:3])
#由于L[-1]为最后一个元素……
print(L[-2:]) #[L[-2],L[-1]]:-2到0,但不包括0
print(L[-2:-1]) #[L[-2]]:-2到-1,但不包括-1
##2*****好用的切片
L=list(range(100)) #0-99
print(L[:10]) #取出了前10个数
print(L[-10:]) #取出了后10个数
print(L[10:20]) #前11-20的数
#!#
#前10个数,每两取
print(L[:10:2]) #[0,2,4,6,8]
#所有数,每5取
print(L[::5])
#[:]复制
L[:] #可以原样复制一个list
q=L
s=L[:] #测试说明L[:]和L同等
print('q=',q)
print('L=',L)
print('s=',s)
#特殊#字符串也可直接看作list,每个字符就是一个元素
print('ABCDEFG'[:3]) #'ABC'
print('ABCDEFG'[::2]) #'ACEG'
print('ABCDEFG'[2:-2]) #'CDE'
##3*****练习
#我的垃圾方法:
def trim(s):
a = 0
b = len(s) #取s的长度
i = 0
x = 0
if s == '': #s长度为0,直接返回
return s
while s[i] == ' ': #全空格的处理
i = i+1
a = i #记录空格数
if i == b: #如果全是空格,则……
return ''
i = -1
while s[i] == ' ':
b = i
i = i-1
s = s[a:b] #显示去掉前后空格后的部分
return s
#使用了递归的别人的方法:
##def trim(s):
## if (len(s)==0): #s长度为0,直接返回
## return ''
## if(s[0]==' '): #1.前部一个空格,改成调用s[1:]为目标
## return trim(s[1:]) #2.最后会为空,从而返回''。
## elif(s[-1]==' '):
## return trim(s[:-1])
## else:
## return s
# 测试:
if trim('hello ') != 'hello':
print('1测试失败!')
elif trim(' hello') != 'hello':
print('测试失败!')
elif trim(' hello ') != 'hello':
print('测试失败!')
elif trim(' hello world ') != 'hello world':
print('测试失败!')
elif trim('') != '':
print('测试失败!')
elif trim(' ') != '':
print('测试失败!')
else:
print('测试成功!')