python元组、序列、字典、集合

python 官方文档-入门教程–20191209

5 数据结构

5.3 元组和序列

列表和字符串有很多的共同特性,例如索引和切片,是序列数据类型
元组也是

元组和列表看起来很像,但它们通常是在不同的场景被使用,有着不同的用途,
元组是不可变的,其序列通常包含不同种类的元素,并且通过解包或者索引来访问,
列表是可变的,并且列表中的元素一般是同种类型的,并且通过迭代访问。

一个特殊的问题是构造包含0个或1个元素的元组:为了适应这种情况,语法有一些额外的改变。空元组可以直接被一对空圆括号创建,含有一个元素的元组可以通过在这个元素后添加一个逗号来构建(圆括号里只有一个值的话不够明确)。丑陋,但是有效。

# 元组
t = (12345,54321,'hello')
print(t)
u = (t,(1,2,3))
print(u)

x,y,z = t
print(x)
print(y)
print(z)

运行结果:

(12345, 54321, 'hello')
((12345, 54321, 'hello'), (1, 2, 3))
12345
54321
hello

语句 t = 12345, 54321, ‘hello!’ 是 元组打包 个例子:值 12345, 54321 和 ‘hello!’ 被打包进元组。其逆操作也是允许的
的一这被称为 序列解包 也是很恰当的,因为解包操作的等号右侧可以是任何序列。

序列解包要求等号左侧的变量数与右侧序列里所含的元素数相同
注意可变参数其实也只是元组打包和序列解包的组合。

5.4 集合

集合是由不重复元素组成的无序的集。
基本用法包括 成员检测和消除重复元素。
集合对象也支持 交集,差集等数学运算。

# 集合
basket = {'apple','orange','apple','pear','orange','banana'}
print(basket)
print('orange' in basket)
print('orange' not in basket)

a = set('abracadabra')
print(a)
b = set('alacazam')
print(b)

print(a-b)   # 差集
print(a|b)  # 并集
print(a&b)  # 交集
print(a^b)  # 只在a,或则只在b

# 集合也支持列表推导式
a = {x for x in 'abracadabra' if x not in 'abc'}
print(a)

运行结果:

{'banana', 'apple', 'orange', 'pear'}
True
False
{'c', 'r', 'b', 'd', 'a'}
{'c', 'l', 'm', 'z', 'a'}
{'b', 'd', 'r'}
{'c', 'l', 'b', 'r', 'm', 'z', 'd', 'a'}
{'c', 'a'}
{'m', 'r', 'b', 'z', 'l', 'd'}
{'d', 'r'}

5.5 字典

字典创建的几种方式


# 字典
tel = {'jack': 4098, 'sape': 4139}
tel['guio'] = 4127
print(tel)
print(list(tel))
print(sorted(tel))
tel1 = dict([('sapce',4139),('gudio',4127)])    # dict函数创建字典
print(tel1)
# 字典推导式创建字典
tel3 = {x:x**2 for x in (2,4,6)}
print(tel3)

运行结果:

{'jack': 4098, 'sape': 4139, 'guio': 4127}
['jack', 'sape', 'guio']
['guio', 'jack', 'sape']
{'sapce': 4139, 'gudio': 4127}
{2: 4, 4: 16, 6: 36}

5.6循环的技巧

在字典中循环时,可以item()方法将关键字和键值同时取出

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

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

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

有时可能会想在循环时修改列表内容,一般来说改为创建一个新列表是比较简单且安全的


# 循环的技巧
#1.字典的items()
for k,v in tel1.items():
    print(k,v)

# enumerate()函数可以将索引位置和其对应的值同时取出
for i ,v in enumerate(['tic','tac','toe']):
    print(i,v)

# 逆向循环时,先正向定位序列,然后调用reversed()函数
for i in reversed(range(1,10,2)):
    print(i)

# zip()函数将其内元素一一匹配,当同时在两个或更多序列中循环时
questions = ['name','quest','favorite color']
answers = ['lancelot','the holy grail','blue']
for q,a in zip(questions,answers):
    print('What"s is your {0}?it is {1}'.format(q,a))

# sorted函数在不改变原序列的基础上返回一个新的排好序的序列
basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
for f in sorted(set(basket)):
    print(f,end =' ')

运行结果:

sapce 4139
gudio 4127
0 tic
1 tac
2 toe
9
7
5
3
1
What"s is your name?it is lancelot
What"s is your quest?it is the holy grail
What"s is your favorite color?it is blue
apple banana orange pear 

5.7深入条件控制

while 和if 条件句中可以任意擦欧总
比较操作可以传递。例如 a < b == c 会校验是否 a 小于 b 并且 b 等于 c。
比较操作可以通过布尔运算符 and 和 or 来组合,并且比较操作(或其他任何布尔运算)的结果都可以用 not 来取反。这些操作符的优先级低于比较操作符;在它们之中,not 优先级最高, or 优先级最低,因此 A and not B or C 等价于 (A and (not B)) or C。和之前一样,你也可以在这种式子里使用圆括号。

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

也可以把比较操作或者逻辑表达式的结果赋值给一个变量,

序列对象通常可以与相同序列类型的其他对象比较。 这种比较使用 字典式 顺序:首先比较开头的两个对应元素,如果两者不相等则比较结果就由此确定;如果两者相等则比较之后的两个元素,以此类推,直到有一个序列被耗尽。 如果要比较的两个元素本身又是相同类型的序列,则会递归地执行字典式顺序比较。 如果两个序列中所有的对应元素都相等,则两个序列也将被视为相等。 如果一个序列是另一个的初始子序列,则较短的序列就被视为较小(较少)。 对于字符串来说,字典式顺序是使用 Unicode 码位序号对单个字符排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值