掌握了Python的数据类型、语句和函数,基本上就可以更快捷、简便的写出很多有用的程序了
比如构造一个1、3、5、7…99的列表,可以通过循环实现
l = []
n = 1
while n <=99:
l.append(n)
n += 2
但是在python中,代码越少越好,越简单越好,(在对付面试中更是有很大的加分,而不是一道很简单的题写一大堆而安慰自己写了很多),基于这一思想,今天要学习这些python的高级特性
取一个list或tuple的部分元素是非常常见的操作,比如一个list如下:
>>>l = ['Micheal','sarah','Tracy','Jack','Bob']
#取前三个元素
l[0:3]
>['Micheal','sarah','Tracy']
是不是比写七八行循环要简单的多?
l[0:3]表示,从索引0开始取,直到索引3为止但不包括3,即索引0,1,2三个元素,如果第一个元素是0,还可以省略
l[:3]
>['Micheal','sarah','tracy']
也可以从索引1开始取两个元素、倒数切片、按步长切片
l[1:3]
>['sarah','tracy']
l[-2:-1]
>['Jack']
l[1:5:2]
>['Micheal','Tracy']
tuple、str都可以进行切片,只是操作的结果仍是tuple和str
(0,1,2,3)[:3]
>(0,1,2)
'ABCD'[:3]
>'ABC'
下面讲一个习题,实现一个trim()函数去掉字符串里的首尾的空格,且不能使用strip()函数:
def trim(s):
i = 0
for each in s:
if each != ' ':
break
i = i + 1
# 此时i的值为字符串最前面的空格数
s = s[i:]
l = len(s)
for i in range(1, l+1):
if s[-i] != ' ':
break
i = i + 1
# 此时i-1的值为字符串最后面的空格数
s = s[:l-(i-1)]
return s
if trim('hello ') != 'hello':
print('测试失败1!')
elif trim(' hello') != 'hello':
print('测试失败2!')
elif trim(' hello ') != 'hello':
print('测试失败3!')
elif trim(' hello world ') != 'hello world':
print('测试失败4!')
elif trim('') != '':
print('测试失败5!')
elif trim(' ') != '':
print('测试失败6!')
else:
print('测试成功!')
我突然脑袋抽搐错误理解了在str不可变的定义,一直以为对str切片不会改变str,在这里浪费了很久,然后突然想到int也不可变,i += 1 大概就是这么误会了,还是太年轻了啊还是要继续学习啊啊啊啊啊
如果给定一个list或tuple,我们可以通过for循环来遍历,这种遍历就称作迭代(iteration)
只要是可迭代的对象,无论有(list)没有(dict)下标的数据类型,都可以迭代。但是要特别注意字典的迭代
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
print(key)
>a
>b
>c
for value in d.values():
print(value)
>1
>2
>3
for item in d.items():
print(items)
('a', 1)
('b', 2)
('c', 3)
如果要对list实现java那样的下表循环,也可以用python内置的enumerate函数把list变成索引-元素对,就可以在for循环中同时迭代索引和元素
l = ['A','B','C']
for i,value in enumerate(l):
print(i,value)
0 A
1 B
2 C
最后一个沙雕题,用迭代查找一个list中的最小值和最大值,并返回一个tuple
def findMinAndMax(l):
min = None
max = None
l.sort()
if l:
min = max = l[0]
for i in l:
if i <= min:
min = i
if i >= max:
max = i
return (min,max)
if findMinAndMax([]) != (None, None):
print('测试失败1!')
elif findMinAndMax([7]) != (7, 7):
print('测试失败2!')
elif findMinAndMax([7, 1]) != (1, 7):
print('测试失败3!')
elif findMinAndMax([7, 1, 3, 9, 5]) != (1, 9):
print('测试失败4!')
else:
print('测试成功!')
如果说这里面有什么困难,那只能是当list为空时,百度查到当list为空 判断是返回false的,所以有了if l:
今天就这样 明天再继续。