python学习笔记之四:list的高级操作

    经过初步学习,发现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循环进行边计算边循环了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值