Python 3.6 学习--基础7:循环技术,更多关于条件,比较序列和其他类型

来源:https://docs.python.org/3.6/tutorial/datastructures.html#the-del-statement

1.循环技术

循环遍历字典时,可以使用该items()方法同时检索密钥和相应的值。

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

循环遍历序列时,可以使用该enumerate()函数同时检索位置索引和相应的值。

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

要同时循环两个或更多个序列,条目可以与该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.

要反向循环序列,首先在正向指定序列,然后调用该reversed()函数。

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

 要按排序顺序循环序列,请使用sorted()返回新排序列表的函数,同时保持源不变。

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

 当你循环它时,有时很有可能改变一个列表; 但是,创建新列表通常更简单,更安全。

>>> import math
>>> raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8]
>>> filtered_data = []
>>> for value in raw_data:
...     if not math.isnan(value):
...         filtered_data.append(value)
...
>>> filtered_data
[56.2, 51.7, 55.3, 52.5, 47.8]

2.更多关于条件

whileif语句中使用的条件可以包含任何运算符,而不仅仅是比较。

比较运算符in并检查序列中是否出现(不发生)值。运算符并比较两个对象是否真的是同一个对象; 这只对像列表这样的可变对象很重要。所有比较运算符具有相同的优先级,低于所有数值运算符的优先级。not inisis not

比较可以链接。例如,测试是否小于,而且等于。a < b == cabbc

比较可以使用布尔运算符进行组合andor,和一个比较的结果(或任何其它的布尔表达式的)可以与否定not。这些优先级低于比较运算符; 它们之间,not具有最高优先级和or最低优先级,因此相当于。与往常一样,括号可用于表达所需的组成。A and not B or C(A and (not B)) or C

布尔运算符andor所谓的短路 运算符:它们的参数从左到右进行计算,一旦确定结果,评估就会停止。例如,如果AC为true但B为false,则不评估表达式 。当用作一般值而不是布尔值时,短路运算符的返回值是最后一个求值的参数。A and B and CC

可以将比较结果或其他布尔表达式分配给变量。例如,

>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'

 请注意,在Python中,与C不同,赋值不能出现在表达式中。C程序员可能会抱怨这一点,但它避免了C程序中遇到的常见问题:===预期时输入表达式。

3.比较序列和其他类型

可以将序列对象与具有相同序列类型的其他对象进行比较。比较使用词典排序:首先比较前两个项目,如果它们不同,则确定比较的结果; 如果它们相等,则比较接下来的两个项目,依此类推,直到任一序列用完为止。如果要比较的两个项本身是相同类型的序列,则递归地执行词典比较。如果两个序列的所有项目相等,则认为序列相等。如果一个序列是另一个序列的初始子序列,则较短的序列是较小的(较小的)序列。字符串的字典顺序使用Unicode代码点编号来排序单个字符。相同类型序列之间比较的一些示例:

(1, 2, 3)              < (1, 2, 4)
[1, 2, 3]              < [1, 2, 4]
'ABC' < 'C' < 'Pascal' < 'Python'
(1, 2, 3, 4)           < (1, 2, 4)
(1, 2)                 < (1, 2, -1)
(1, 2, 3)             == (1.0, 2.0, 3.0)
(1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)

 请注意,如果对象具有适当的比较方法,则将不同类型的对象与对象进行比较<或是>合法的。例如,混合数字类型根据它们的数值进行比较,因此0等于0.0等。否则,解释器将引发TypeError异常,而不是提供任意排序。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值