python的查缺补漏(三)

迭代

百度百科解释如下:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。

可迭代对象:有多个元素,可以进行重复反馈,言简意赅的说:是能进行for循环的对象。

-----------------------------------------------------------------------------------------------------------

浅拷贝与深拷贝

浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用

深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”

 

列表推导式

 

列表推导式看起来比较厉害。

列表推导式的结构是由一对方括号所包含的以下内容:一个表达式,后面跟一个 for 子句,然后是零个或多个 for if 子句。

如何使用的for与if,举例如下:

squares = [x**2 for x in range(10)]
# x在rang(10)里做循环,并求出每个x的二次方。
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
# x在[1,2,3]中遍历取值,在y中遍历取值,形成(x,y),需满足条件x!=y
输出结果:
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

# 等价于
combs = []
for x in [1,2,3]:
     for y in [3,1,4]:
         if x != y:
             combs.append((x, y))

------------------------------------------------------------------------------------------------------

元组与列表

元组是 immutable(不可变的),其序列通常包含不同种类的元素,并且通过解包(这一节下面会解释)或者索引来访问。列表是 mutable(可变的,im前缀) ,并且列表中的元素一般是同种类型的,并且通过迭代访问。

 

0个元素元组:empty = ()

1个元素元组 oneleton = ‘only one’,  即在一个元素元组的后边添加一个逗号构建。

逗号表示,这是一个元组。对比如下:

singleton = 'only one'
输出结果:
only one #字符串
singleton = 'only one',
输出结果:
('only one',)

---------------------------------------------------------------------------------------------------------------------------------

循环的技巧

1.当在字典中循环时,用 items() 方法可将关键字和对应的值同时取出

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

2.当在序列中循环时,用 enumerate() 函数可以将索引位置和其对应的值同时取出

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

3.当同时在两个或更多序列中循环时,可以用 zip() 函数将其内元素一一匹配。

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

位置是一一对应的,name对应lancelot,quest对应the holy grail,favorite color对应blue

4.当同时在两个或更多序列中循环时,可以用 zip() 函数将其内元素一一匹配。

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

5.如果要逆向循环一个序列,可以先正向定位序列,然后调用 reversed() 函数

>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

6.如果要按某个指定顺序循环一个序列,可以用 sorted() 函数,它可以在不改动原序列的基础上返回一个新的排好序的序列

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
...     print(f)
...
apple
banana
orange
pear

是随机的,并没有刻意设置的顺序。(据我所知,望指导。)

--------------------------------------------------------------------------------------------------------------------

条件控制

比较操作符 in  not in 校验一个值是否在(或不在)一个序列里。操作符 is  is not 比较两个对象是不是同一个对象

布尔运算符 and  or 也被称为 短路 运算符:它们的参数从左至右解析,一旦可以确定结果解析就会停止。例如,如果 A  C 为真而 B 为假,那么 A and B and C 不会解析 C。当用作普通值而非布尔值时,短路操作符的返回值通常是最后一个变量。

 

注意 Python 与 C 不同,赋值操作不能发生在表达式内部。C程序员可能会对此抱怨,但它避免了一类C程序中常见的错误:想在表达式中写 == 时却写成了 =。(不懂)

 

--------------------------------------------------------------------------------------------------------

序列类型(list tuple range

序列对象可以与相同类型的其他对象比较。它们使用 字典顺序 进行比较:首先比较两个序列的第一个元素,如果不同,那么这就决定了比较操作的结果。如果它们相同,就再比较每个序列的第二个元素,以此类推,直到有一个序列被耗尽。

举例如下:

#对应位置进行比较
(1, 2, 3)              < (1, 2, 4)
# 3 小于 4
[1, 2, 3]              < [1, 2, 4]
# 3 小于 4
'ABC' < 'C' < 'Pascal' < 'Python'
# A 小于 C。C小于P。P相同,而后的a小于y
(1, 2, 3, 4)           < (1, 2, 4)
# 3 小于 4
(1, 2)                 < (1, 2, -1)
# -1处 对应的位置没有值,并不会默认为 0 进行比较。
(1, 2, 3)             == (1.0, 2.0, 3.0)
# 整数型 与 浮点型 相同
(1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)
# 同上上处

----------------------------------------------------------------------------------------------------

这部分内容大部分从文档摘录下来,较容易理解。后续补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值