《跟着小吴哥学python》之 07 python中的高级语法特性

本文深入探讨Python中列表、元组、字典和集合的高效操作方法,包括切片、迭代、列表生成式及生成器的应用技巧。通过具体代码示例,读者将学会如何灵活运用这些工具进行数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、切片[list,tuple]

L[m:n]表示,从索引m开始取,直到索引n-1;即索引m,m+1,……,n-1。

L[m:n:p]表示:从索引m开始到索引n取数据,每p个取一个,但是不包含索引n。

1、m、n、p、可以为负数:

1、p>0 从首部往尾部方向取,p<0是从尾部向首部取。

2、m、n大于0表示索引值。

3、m、n小于0表示倒数第几个。

 L[-5:-2] 表示倒数第5到倒数第2元素(不包含倒数第2个元素)从首到尾的顺序取。

 L[-2:-5:-2] 表示倒数第2到倒数第5元素(不包含倒数第5个元素)从尾到首的顺序取,每2个取一个。

2、可以缺省: 甚至什么都不写,L[::]。m缺省为p表示的方向的首元素,n缺省为p表示的方向的尾元素的后一个,p缺省表示1

代码实例:

l=['A','B','C','B','E']

print(l[1])

#p为整数
#L[m:n]表示,从索引m开始取,直到索引n 但是不包含n。
print(l[1:5])
#L[m:n:p]表示:从索引m开始到索引n取数据,每p个取一个,但是不包含索引n。
print(l[1:5:2])

#m 缺省 从头开始取  n不写取到尾部 p默认是1
print(l[::2])
print(l[1::2])

#####m n p 负数 m n 为负数表示倒数第几个  p表示方向 p>0 正方向 反正负方向

#ECA
print(l[-1::2])
print(l[-1::-2])


print(l[4:1:-2])

print(l[1:4:-1])
print(l[1:4:1])

2、迭代[list,tuple,dict,set]

list和tuple迭代的是里面的元素;for i in l;

dict迭代key: for key in d ;或者 for i in d.keys();

dict迭代value:可以用for v in d.values();

dict迭代key和value,可以用for k, v in d.items();

set 迭代里面的元素 for i in s

索引下标遍历:

如果要对这些集合实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

list或者tuple遍历索引和元素:for i, value in enumerate(['A', 'B','C']):

set遍历索引和元素:for i,value in enumerate(set(['a','b','c'])):

dict遍历 索引和key:for i,k in enumerate({'A':'a', 'B':'b', 'C':'c'}):

代码示例:

# 迭代 list
l=['a','b','c']
for i in l:
    print(i)

d={"a":"A","b":"B"}
for i in d.keys():
    print(i)

for k in d:
    print(k)


for k,v in d.items():
    print(k,v)

for i,value in enumerate(l):
    print(i,value)

for i,value in enumerate(('a','b','c')):
    print(i,value)

for i,value in enumerate(set(['a','b','c'])):
    print(i,value)

for i,k in enumerate({'A':'a', 'B':'b', 'C':'c'}):
    print(i,k)

 

3、列表生成式

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

[x * x for x in range(1, 11)]    [x * x for x in range(1, 11) if x % 2 == 0]

还可以使用两层循环,可以生成全排列:[m + n for m in 'ABC' for n in 'XYZ']

for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value:

d = {'x': 'A', 'y': 'B', 'z': 'C' }  [k + '=' + v for k, v in d.items()]

代码示例:

# 列表生成式

l=[2*i for i in range(1,11)]
print(l)

l=[2*i for i in range(1,11) if i%2==0]
print(l)

l=[i*j for i in [1,2,3] for j in [1,2,3] if i%2==0 and j%2!=0]
print(l)

 

​​​​​​​4、生成器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

只要把一个列表生成式的[]改成(),就创建了一个generator:

g = (x * x for x in range(10))

我们讲过,generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

但是我们一般通过for循环来迭代它,并且不需要关心StopIteration的错误。

for n in g:

print(n)

代码示例:

# 列表生成器
g=(2*i for i in range(1,11))
for i in g:
    print(i)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值