python学习日记七python操作之切片和迭代

切片

在学习日记三中我们学习了list的相关操作,其中就有对list的切片操作。
在这里我们将学习到一个新的方法。
操作如下图所示

L = [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
L[0:3]
[‘Adam’, ‘Lisa’, ‘Bart’]
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
第一个索引为0时,可以省略。

L[ : ]
[‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
:表示从头到尾,因此L[ : ]实际上是复制了一个新list。

L[::2]
[‘Adam’, ‘Bart’]
第三个参数表示每n个取一个,上面的L[ ::2]会每两个元素取一个来,也就是隔一个取一个。

这里的切片操作同样适用与tuple,只是切片结果变成tuple。

对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,例如:

L = [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]

L[-2:]
[‘Bart’, ‘Paul’]

L[:-2]
[‘Adam’, ‘Lisa’]

L[-3:-1]
[‘Lisa’, ‘Bart’]

L[-4👎2]
[‘Adam’, ‘Bart’]

记住倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。

对字符串切片

‘ABCDEFG’[:3]
‘ABC’

‘ABCDEFG’[-3:]
‘EFG’

‘ABCDEFG’[::2]
‘ACEG’

例题:设计一个函数把所有字符的首字母变成大写。

def Upper(s):
    return s[0].upper()+s[1:]
print (Upper('hello'))
print (Upper('best'))
#输出
Hello
Best

迭代

迭代在python中就是for循环
例如请用for循环迭代数列1-100并打印出7的倍数

for i in range(1,101):
    if i%7==0:
       print (i)


利用enumerate()函数完成python的索引迭代。使用 enumerate() 函数,我们可以在for循环中同时绑定索引index和元素name。但是,这不是 enumerate() 的特殊语法。实际上,enumerate() 函数把:

[‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]

变成了类似:

[(0, ‘Adam’), (1, ‘Lisa’), (2, ‘Bart’), (3, ‘Paul’)]

因此,迭代的每一个元素实际上是一个tuple:

for t in enumerate(L):
index = t[0]
name = t[1]
print index, ‘-’, name

例如:
在迭代 [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’] 时,如果我们想打印出名次 - 名字(名次从1开始),请考虑如何在迭代中打印出来。

L=zip([1,2,3,4],['Adam','Lisa','Bart','Paul'])
for index,name in L:
    print (index,'-',name)
迭代dict的value

dict{key:value},用 for 循环直接迭代 dict,可以每次拿到dict的一个key。
dict对象values()可以把dict转换成一个包含所有value的list,这样我们就可以迭代dict的每一个value。
例如:给定一个dict:
d={‘Adam’:95,‘Lisa’: 85, ‘Bart’: 59, ‘Paul’: 74 }请计算同学们的平均分。

d={'Adam':95,'Lisa': 85, 'Bart': 59, 'Paul': 74 }
sum=0.0
for i in d.values():
    sum=sum+i
 print (sum/len(d))#print (sum/4)

除了values()的方法还有itervalues()效果跟values()一样。
那这两个方法有何不同之处呢?

那两者有什么不同呢

  1. values() 方法实际上把一个 dict 转换成了包含 value 的list。

  2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。

  3. 打印 itervalues() 发现它返回一个 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。

如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。

迭代的key和value

上述我们讲了values()函数迭代dict中的所有value,那么如何同时迭代dict的key和value呢。
此时items()可以同时迭代key和value。
例如:
请根据dict:
d = { ‘Adam’: 95, ‘Lisa’: 85, ‘Bart’: 59, ‘Paul’: 74 }
打印出 name : score,最后再打印出平均分 average : score。

d={'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74}
sum=0.0
for key,value in d.items(d):
    sum=sum+value
    print (key,':',value)
 print ('average',':',sum/len(d))
今天的分享就到这里。欢迎大家来指点和一起学习,我是爱吃肉的python小白yyyloki,如果你觉得不错的话,那就给我点个👍吧!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值