经过初步学习,发现python对list,字典等的自带操作函数异常丰富,看的我是眼花缭乱啊,下面就介绍一下这次高端操作!
切片,是对列表字符串等等进行裁切获取的方法.
切片怎么实现呢?
#切片
L = [1,2,3,4,5,6,7,8,9]
print(L[3]) #普通操作
print(L[1:3]) #取大于等于1小于3的值
print(L[1:-1]) #取第一个倒第第二个
print(L[:]) #all
print(L[1:]) #除了第一个
print(L[1:7:2]) #先取第1个到第6个,然后每两个取一个,不设置就不跳过任何一个
结果:
4
[2, 3]
[2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4, 5, 6, 7, 8, 9]
[2, 4, 6]
从上面简单的操作就可以对列表和字符串进行操作!不愧是python!
迭代
迭代就是for循环的使用方式。
这个就很好理解,for循环嘛,唯一不同的地方就是写法不同。
#结果
for x in [1,2,3,4,5,6,7][::2]: #1 3 5 7
print(x)
for x in (1,2,3):
print(x) #1 2 3
for y in "789":
print(y) #7 8 9
for i in {"a":1,"b":2,"c":3}:
print(i) #c b a 这里发现顺序不对?原因是字典
for i in {"a":1,"b":2,"c":3}.values(): #3 2 1 不是按照你看到的这个顺序排列的
print(i)
for i,j in {"a":1,"b":2,"c":3}.items():
print(i,j) #c,3 b,2 a,1
迭代还有个直接用来判断的函数:isinstance():
from collections import Iterable
b = isinstance(1,str)
print(b)
b = isinstance([],Iterable) #第一个参数是要判断的对象
print(b) #第二个参数是判断类型,可以判断int float 等等
结果:
False
True
列表生成式与生成器
列表生成式是快速生成一个有规律的列表的方式,而生成器就为了生成比较复杂甚至很长的列表而创造,为了是可以节省空间,快速完成较大的根据有规律的算法生成的列表。
列表生成式很固定,用几次就熟悉了:
d = [x for x in [1,2,3,4,5,6]]
print(d)
d = [x+x for x in [1,2,3,4,5,6]]
print(d)
d = [x*x for x in [1,2,3,4,5,6]]
print(d)
d = [x+y for x in [1,2,3,4,5,6] for y in [6,5,4,3,2,1]]
print(d) #这个+号需要注意!!竟然不是正常的相加,实际上是两层循环
d = [i+"="+j for i,j in {"a":"1","b":'2',"c":'3'}.items()]
print(d)
结果:
[1, 2, 3, 4, 5, 6]
[2, 4, 6, 8, 10, 12]
[1, 4, 9, 16, 25, 36]
[7, 6, 5, 4, 3, 2, 8, 7, 6, 5, 4, 3, 9, 8, 7, 6, 5, 4, 10, 9, 8, 7, 6, 5, 11, 10, 9, 8, 7, 6, 12, 11, 10, 9, 8, 7]
['b=2', 'a=1', 'c=3']
而生成器是为了避免太大的列表,例如一百万个元素的列表,当然如果是没有规律的我们只能写在文件中了。而如果是有规律,有一定算法的就可以直接定义一个函数,每次往下迭代一个的时候再进行计算!生成器就是这样的一个概念。
#直接修改列表生成式的[]为()小括号就是一个简单的生成器
d = (x*x for x in range(1000000))
def printdf(d):
for x in d:
if x<100000:
print(x)
#这里不加打印了,自己试试
printdf(d)
下面做一个难一点的生成器:根据1,2,3,4,,,将前一万个乘以1放在列表的前一万个,第二个一万个乘以2,第三个乘以3....
正常从C思路处理:
def func(num):
for x in range(num):
value = x*(x//10000+1)
print(value)
func(40000)
python只需要改个yield:
def func(num):
for x in range(num):
value = x*(x//10000+1)
yield(value)
for x in func(10):
print(x)
想要做出一个这样的生成器,函数需要可以打印出所有信息,然后将打印的print改成yield就可以使用for循环进行边计算边循环了。