2.基础2

1.切分
2.遍历
3.列表生成式
4.生成器
5.迭代器

1.切分

	l = [1, 2, 3, 4, 5, 6]
	# 取第0到第3个元素
	print(l[0:3]) #[1, 2, 3]
	print(l[:3]) #[1, 2, 3]
	
	# 取倒数第0到第2个元素
	print(l[-2:]) #[5, 6]
	
	l1 = list(range(10))
	# 前6个每隔2个取值
	print(l1[:6:2]) #[0, 2, 4]
	# 所有的数每隔3个取值
	print(l1[::3]) #[0, 3, 6, 9]
	# 原list不变
	print(l1[:]) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
	
	# 字符串的切分
	s = "ABCDEFG"
	print(s[:3]) #ABC
	print(s[::2]) #ACEG
	
	输出结果:
	[1, 2, 3]
	[1, 2, 3]
	[5, 6]
	[0, 2, 4]
	[0, 3, 6, 9]
	[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
	ABC
	ACEG

相当于Java里的str.subString(start,end),包含头不包含尾。

2.遍历

	l = [1, 2, 3, 4, 5, 6]
	
	d = {"A": 1, "B": 2, "C": 3}
	
	# 遍历list
	for i in l:
	    print(i)
	
	# 遍历dict的key
	for j in d:
	    print(j)
	# 遍历dict的value
	for j in d.values():
	    print(j)
	    
	# 遍历dict的key和value
	for j in d:
	    print(j, d[j])
	# 遍历dict的key和value
	for i, j in d.items():
	    print(i, j)
	    
	# 遍历字符串
	s = "ABC"
	for i in s:
	    print(i)
	
	输出结果:
	1
	2
	3
	4
	5
	6
	A
	C
	B
	1
	3
	2
	A 1
	C 3
	B 2
	A 1
	C 3
	B 2
	A
	B
	C

只要是可迭代数据类型,都可以使用for循环遍历,无需关心被迭代的对象是一个list还是dict或是String,可通过collections模块的iterable类型判断;

from collections import Iterable

print(isinstance(s, Iterable))
print(isinstance(123,Iterable))
输出结果:
True
False

3.列表生成式

	# 生成1到10的list
	print(list(range(1, 11)))
	
	# 通过普通for循环生成1*1,2*2...10*10的list
	l = []
	for i in range(1, 11):
	    l.append(i * i)
	print(l)
	
	# 通过python生成式生成1*1,2*2...10*10的list
	print([i * i for i in range(1, 11)])
	
	# 生成式里加入条件判断
	print([i * i for i in range(1, 11) if i % 2 == 0])
	
	# for循环里套for循环
	print([i + j for i in "ABC" for j in "123"])
	
	import os
	
	# 列出当前目录下的文件名
	print([f for f in os.listdir('.')])
	
	# 将一个list里的字母全部变小写
	L = ['A', 'B', 'C', 1, 'D']
	print([s.lower() for s in L if isinstance(s, str)])

输出结果:

	[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
	[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
	[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
	[4, 16, 36, 64, 100]
	['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
	['.git', '.idea', 'First.iml', 'learning.py', 'test1_1.py', 'test1_2.py', 'test1_3_list.py', 'test1_4_if.py', 'test1_5_map.py', 'test1_6_func.py', 'test1_7_dg.py', 'test2_1.py', 'test2_2.py', 'test2_3.py']
	['a', 'b', 'c', 'd']

4.生成器

通过列表生成式创建列表如果生成一个很大的列表会占用很大的内存空间,如果创建后又只使用了前面几个元素会造成内存浪费,所以生成器就来了,生成器可以在循环的过程中通过推算得出下一个值,而不用直接生成一个完整的大list,在某些情况下会节省很多内存。

	# 创建一个generator
	g = (x * x for x in range(4))
	# 获取generator生成的列表里的值
	print(next(g), next(g))
	# 通过迭代取值
	for x in g:
	    print(x)
	
	输出结果:
	0 1
	4
	9

5.迭代器

可直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,如list、tuple、dict、set、str等;
一类是Genarator和带yield的function;这些可用for循环迭代的对象统称为可迭代对象:Iterable;
Genarator不仅可以作用于for循环,还可以通过不断调用next()返回下一个值,这种可以被next()取值的对象就是迭代器:Iterator;
集合数据类型是可迭代对象,并不是迭代器,想将集合数据类型变成迭代器,可通过iter()函数

iter([1,2,3])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值