1、切片:
取list / tuple L[ ]部分元素-----L[0:3] 从0开始去 到3为止 不包括3
L[-2:] 末尾2个
L[:10:2]前十个数 每两个取一次
L[::-1]从最后一个开始 每1个取一次
L[:] 原样复制一个list
2、迭代:
dict默认迭代的是key
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> for key in d:
... print(key)
...
a
c
b
带下标:
>>> for i, value in enumerate(['A', 'B', 'C']):
... print(i, value)
...
0 A
1 B
2 C
3、列表生成 :list(range( ))
#生成listp[1,2,3,...,10]
>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#生成1*1,2*2,....,10*10
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
#生成两层循环
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
#把所有字符串变小写
>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
4、生成器generator:
保存的是算法,返回的是一个generator对象(而普通函数是遇到return返回),打印内部元素用next()
标志:如果函数定义中包含yield关键字,那这个函数就是generator
#list
L = [x * x for x in range(10)]
>>[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
#generator
g = (x * x for x in range(10))
>><generator object <genexpr> at 0x1022ef630>
【练习】
1、利用切片操作,实现一个trim()函数,去除字符串首尾的空格
#!/usr/bin/env python3
#coding=gbk
def trim(s):
if s[:1] != ' ' and s[-1:] != ' ':
return s
elif s[:1] == ' ':
return trim(s[1:])
elif s[-1:] == ' ':
return trim(s[:-1])
s1=input()
print(trim(s1))
2、请使用迭代查找一个list中最小和最大值,并返回一个tuple
def findMinAndMax(L):
if len(L)==0:
return(None,None)
max=min=L[0]
for i in L:
if i>=max:
max=i
if i<=min:
min=i
return (min,max)
print(findMinAndMax([]))
print(findMinAndMax([7]))
print(findMinAndMax([7, 1]))
print(findMinAndMax([7, -1, 3, 9, 5]))
3、使用内建的
isinstance
函数可以判断一个变量是不是字符串:
L1 = ['Hello', 'World', 18, 'Apple', None]
L2=[s.lower() for s in L1 if isinstance(s,str) ]
print(L2)
4、generator实现杨辉三角
def triangles():
num = [1]
while True:
yield num
num = [num[i] + num[i-1] for i in range(len(num))if i != 0]
num.append(1) #在list末尾加1
num.insert(0,1) #在list 首位加1