Python编程_Lesson008_Python特性

list高级特性

参考资料
我们现在有一个需求,想取一个列表里面的前两个元素作为新列表的元素,该怎么办呢?有人说那很简单嘛,下面就可以完成:

>>> mylist = [1,2,3,4,5]
>>> mylist
[1, 2, 3, 4, 5]
>>> otherlist = [mylist[0], mylist[1]]
>>> otherlist
[1, 2]

这不是So Easy吗?
这里写图片描述
但是上面的方法有点儿笨拙,还有使用for循环来取值的方式也并不是那么方便,下面我们就要看一下证简单的方法:

>>> mylist = [1,2,3,4,5]
>>> otherlist = mylist[0:2]
>>> otherlist
[1, 2]
>>> otherlist = mylist[1:4]
>>> otherlist
[2, 3, 4]

是不是觉得Python有一种高大上的感觉?
上面就是我们所说的切片操作。
我们还可以使用[i:j:k]的方法进行每隔从i到j每隔k个元素取一个元素:

>>> mylist = list(range(100))
>>> mylist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> otherlist = mylist[::2]
>>> otherlist
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
>>> otherlist = mylist[10:20:2]
>>> otherlist
[10, 12, 14, 16, 18]
>>> otherlist = mylist[-1:0:-2]
>>> otherlist
[99, 97, 95, 93, 91, 89, 87, 85, 83, 81, 79, 77, 75, 73, 71, 69, 67, 65, 63, 61, 59, 57, 55, 53, 51, 49, 47, 45, 43, 41, 39, 37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1]

从上面的例子可以看出,是不是Python很强大、很任性呢?

list列表的遍历

我们有两种方法遍历list列表:
第一种方式:

>>> mylist = list(range(10))
>>> for num in mylist:
    print(num)


0
1
2
3
4
5
6
7
8
9

第二种方式:

>>> mylist = list(range(10))
>>> length = len(mylist)
>>> for i in range(length):
    print(mylist[i])


0
1
2
3
4
5
6
7
8
9

dict字典的遍历

dict的遍历和list的遍历还是有一些区别的,毕竟list元素里面存储的只有一个值,而dict元素里面存储的有键和值,我们先看一个例子:

>>> mydict = {1:'a', 2:'b', 3:'c'}
>>> for num in mydict:
    print(num)


1
2
3

我们可以看出,上面打印出来的是键,而不是我们想要的值,那么我们下面就知道怎么输出值了

>>> mydict = {1:'a', 2:'b', 3:'c'}
>>> for dictkey in mydict:
    print(mydict[dictkey])


a
b
c

这就是我们想要的值了。
当然我们还可以使用dict字典里面一些内建的方法来得到我们想要的值,比如:
1. 只获得键

>>> mydict = {1:'a', 2:'b', 3:'c'}
>>> for x in mydict.keys():
    print(x)


1
2
3
  1. 只获得值
>>> mydict = {1:'a', 2:'b', 3:'c'}
>>> for x in mydict.values():
    print(x)


a
b
c
  1. 键和值都要
>>> mydict = {1:'a', 2:'b', 3:'c'}
>>> for x in mydict.items():
    print(x)


(1, 'a')
(2, 'b')
(3, 'c')

是不是觉得Python和厉害呢?
从上面的for循环我们得到一些启发,它和我们C++语言中的Iterator迭代器十分相似,那么Python这种机制是不是也是使用迭代器实现的呢?答案是肯定的。我们可以使用下面的方法来判断是否是可迭代的。(这个方法有点儿问题,以后找到了再补上)

列表生成器

我们想生成一些有规律的列表可以使用下面的方法:
1. 普通的方法

>>> mylist = []
>>> for i in range(1, 11):
    mylist.append(i*i)


>>> mylist
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
  1. 使用列表生成器
>>> mylist = [i*i for i in range(1, 11)]
>>> mylist
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

generator生成器

它是使用一个圆括弧”()”来标识的,而list生成器则是使用中括弧”[]”来标识的。generator生成器的一个特点是,它具有滞后性,我们看一个例子:

>>> gen = (i*i for i in range(1, 11))
>>> gen
<generator object <genexpr> at 0x000002D07FAD4938>
>>> type(gen)
<class 'generator'>
>>> next(gen)
1
>>> next(gen)
4
>>> next(gen)
9
>>> next(gen)
16
>>> next(gen)
25
>>> next(gen)
36
>>> next(gen)
49
>>> next(gen)
64
>>> next(gen)
81
>>> next(gen)
100
>>> next(gen)
Traceback (most recent call last):
  File "<pyshell#145>", line 1, in <module>
    next(gen)
StopIteration

从上面可以看出,我们可以通过next一个一个将结果遍历出来,如果遍历完了,还继续遍历下去的话,就会报错。
生成器的这个滞后性的特点可以帮我们完成完成很多编程技巧,因为生成器相当于一个函数,会挨个的返回结果。

我们还可以使用for循环进行遍历,因为生成器也是可以迭代的。

>>> gen = (i*i for i in range(1, 11))
>>> for x in gen:
    print(x)


1
4
9
16
25
36
49
64
81
100
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值