切片、迭代

我的python学习19/9/5

切片、迭代

掌握了Python的数据类型、语句和函数,基本上就可以更快捷、简便的写出很多有用的程序了
比如构造一个1、3、5、7…99的列表,可以通过循环实现

l = []
n = 1
while n <=99:
	l.append(n)
	n += 2

但是在python中,代码越少越好,越简单越好,(在对付面试中更是有很大的加分,而不是一道很简单的题写一大堆而安慰自己写了很多),基于这一思想,今天要学习这些python的高级特性

切片

取一个list或tuple的部分元素是非常常见的操作,比如一个list如下:


>>>l = ['Micheal','sarah','Tracy','Jack','Bob']
#取前三个元素
l[0:3]
>['Micheal','sarah','Tracy']

是不是比写七八行循环要简单的多?
l[0:3]表示,从索引0开始取,直到索引3为止但不包括3,即索引012三个元素,如果第一个元素是0,还可以省略

l[:3]
>['Micheal','sarah','tracy']

也可以从索引1开始取两个元素、倒数切片、按步长切片

l[1:3]
>['sarah','tracy']
l[-2:-1]
>['Jack']
l[1:5:2]
>['Micheal','Tracy']

tuple、str都可以进行切片,只是操作的结果仍是tuple和str

(0,1,2,3)[:3]
>(0,1,2)
'ABCD'[:3]
>'ABC'

下面讲一个习题,实现一个trim()函数去掉字符串里的首尾的空格,且不能使用strip()函数:

def trim(s):
    i = 0
    for each in s:
        if each != ' ':
            break
        i = i + 1
    # 此时i的值为字符串最前面的空格数
    s = s[i:]
    l = len(s)
    for i in range(1, l+1):
        if s[-i] != ' ':
            break
        i = i + 1
    # 此时i-1的值为字符串最后面的空格数
    s = s[:l-(i-1)]
    return s


if trim('hello  ') != 'hello':
    print('测试失败1!')
elif trim('  hello') != 'hello':
    print('测试失败2!')
elif trim('  hello  ') != 'hello':
    print('测试失败3!')
elif trim('  hello  world  ') != 'hello  world':
    print('测试失败4!')
elif trim('') != '':
    print('测试失败5!')
elif trim('    ') != '':
    print('测试失败6!')
else:
    print('测试成功!')

我突然脑袋抽搐错误理解了在str不可变的定义,一直以为对str切片不会改变str,在这里浪费了很久,然后突然想到int也不可变,i += 1 大概就是这么误会了,还是太年轻了啊还是要继续学习啊啊啊啊啊

迭代

如果给定一个list或tuple,我们可以通过for循环来遍历,这种遍历就称作迭代(iteration)

只要是可迭代的对象,无论有(list)没有(dict)下标的数据类型,都可以迭代。但是要特别注意字典的迭代

d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
	print(key)
>a
>b
>c
for value in d.values():
	print(value)
>1
>2
>3
for item in d.items():
	print(items)
('a', 1)
('b', 2)
('c', 3)

如果要对list实现java那样的下表循环,也可以用python内置的enumerate函数把list变成索引-元素对,就可以在for循环中同时迭代索引和元素

l = ['A','B','C']
for i,value in enumerate(l):
	print(i,value)
0 A
1 B
2 C

最后一个沙雕题,用迭代查找一个list中的最小值和最大值,并返回一个tuple

def findMinAndMax(l):
    min = None
    max = None
    l.sort()
    if l:
        min = max = l[0]
        for i in l:
            if i <= min:
                min = i
            if i >= max:
                max = i
    return (min,max)
if findMinAndMax([]) != (None, None):
    print('测试失败1!')
elif findMinAndMax([7]) != (7, 7):
    print('测试失败2!')
elif findMinAndMax([7, 1]) != (1, 7):
    print('测试失败3!')
elif findMinAndMax([7, 1, 3, 9, 5]) != (1, 9):
    print('测试失败4!')
else:
    print('测试成功!')

如果说这里面有什么困难,那只能是当list为空时,百度查到当list为空 判断是返回false的,所以有了if l:

今天就这样 明天再继续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值