外贸领航
首页外贸学堂 > Python基础教程「python第一课」

Python基础教程「python第一课」

来源:互联网 2023-08-14 13:04:05

day06回顾:

列表 list

序列 sequence:

字符串 str, 列表 list, 元组 tuple, bytes, bytearray

in / not in 运算符

索引 index

索引赋值,替换原来的元素

切片 slice

切片赋值, 实现添加,删除,修改

del 语句

用于删除列表中的元素

L1 = [1, 2, [3.1, 3.2]]

del L1[0]

del L1[2][1]

深拷贝 和 浅拷贝

函数:

len

max

min

sum 求和(只能对数字求和)

any 任何一个为真,结果为真

all 所有为真,结果才为真

list 中常用的方法:

...

>>> help(list)

day07笔记:

列表推导式 (list comprehension)

作用:

用简易方法生成列表

语法

[表达式 for 变量 in 可迭代对象]

[表达式 for 变量 in 可迭代对象 if 真值表达式]

说明:

1. 先用可迭代对象生成一个对象,同时用变量绑定这个对象

2. 调用表达式, 把当前的表达式结果以追加方式存放于列表中

3. 重复1步骤,直到可迭代对象不再提供数据为止

4. for in 表达式的if 子句可以省略,省略后将对所有对象进行处理

5. 如果 if真值表达式的布尔值为False,则可迭代对象生成的数据将被丢弃

示例:

见: list_comprehesion.py

# 生成一个列表:

[1, 2, 3, 4, 5, 6, ..... , 10000]

L = [x for x in range(1, 10001)]  # 正确做法1

L = [x 1 for x in range(10000)] # 正确做法2

练习:

生成一个数值为1~9的平方的列表:

L = [1, 4, 9, 16, ...., 81]

用列表推导式实现

L = [x ** 2 for x in range(1, 10)]

示例:

# 生成奇数的列表

L = [x for x in range(100) if x % 2 == 1]

练习:

生成一个列表:x的平方 1的列表,跳过结果能被5整除的数,

x<= 100

L = [2, 5, 10, 17, ....]

L = [2, 17, ....]

L = [x ** 2 1 for x in range(1, 101)

if (x ** 2 1) % 5]

L = [x ** 2 1 for x in range(1, 101)

if (x ** 2 1) % 5 != 0]

列表推导式的嵌套

语法:

[表达式

for 变量1 in 可迭代对象1 if 真值表达式1

for 变量2 in 可迭代对象2 if 真值表达式2

...

]

例如:

s = "ABC"

s2 = "123"

生成如下列表:

  ["A1", "A2", "A3", "B1", "B2", ....]

L = [x y for x in s for y in s2]

练习:

1. 用列表推导试生成如下列表:

[1, 4, 7, 10, ....., 100]

# 做法1

list(range(1, 101, 3))

# 做法2

[x for x in range(1, 101, 3)]

# 做法3

[x for x in range(1, 101) if x % 3 == 1]

2. 思考题:

  试想能否用列表推导式生成如下列表:

  [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

[ [x, x, x] for x in range(1, 8, 3)]

[ [y for y in range(x, x 3)]

for x in range(1, 8, 3)]

元组 (tuple)

元组是不可以改变的序列。同list一样,元组可以存放任意类型的值

表示方法:

用小括号() 括起来,单个元素括起来后加逗号(,)来区分表达式分组还是元组

创建空元组

t = () # t绑定空元组

创建非空元组:

t = 200,

t = (20,)

t = (1, 2, 3)

t = 100, 200, 300

t = (1, "two", 3, "four")

元组的构造(创建)函数

tuple() 生成一个空元组,等同于 ()

tuple(iterable) 用可迭代对象生成一个元组

示例:

t = tuple() # 空元组

t = tuple("ABC") # t = ("A", "B", "C")

t = tuple([1,2,3,4]) # t = (1,2,3,4)

问题:

请问哪儿些变量绑定的是元组

t = 20

t1 = (20)

t2 = (1 20)

t3 = (30, ) # t3 是元组

x, y, z = 100, 200, 300

x, y, z = (100, 200, 300)

x, y, z = [100, 200, 300]

x, y, z = [100, 200, (300, 400)]

x, y, z = "ABC"

元组的算术运算:

= * *=

示例:

t = (1,2,3) (4,5,6) # t = (1,2,3,4,5,6)

t = (7,)

t = 8,

* *= 略过

元组的比较运算:

< <= > >= == !=

示例:

(1, 2, 3) != (4,5,6) # True

(1,2,3) < (1,4,3) # True

(2, 3, 1) > (1, 2, 3) # True

说明:

比较规则等同于字符串和列表的比较规则

in / not in 运算符

等同于列表和字符串中的in/not in 运算符

用来判断一个值是否存在于元组中

索引 index

用法等同于字符串的索引

元组不能索引赋值

示例:

t = (1, 2, "3.0")

print(t[0])

print(t[2])

t[2] = 3.0 # 错的!!!!

切片 slice

用法等同于字符的切片

元组不能切片赋值

* 元组的切片返回一个新的元组

示例:

x = (1,2,3,4,5,6,7,8)

y = x[::2] # y = (1,3,5,7)

元组的方法:

T.index() 返回对应元素的下标,当value不存在时,触发ValueError的错误

T.count(x) 返回列表中元素的个数

能用于序列的函数总结:

len(x) 返回序列长度

max(x) 返回序列中最大值的元素

min(x) 返回.......小 .....

sum(x) 返回序列中所有元素的和

any(x) 真值测试...

all(x) 真值测试...

str(obj) 将对象obj转为字符串

list(iterable) 用可迭代对象生成列表

tuple(iterable) .............元组

思考:

元组里能否放列表

t = (1, 2, [3.1, 3.2]) # 可以吗?

能否把3.1 改为 3.14呢?

为什么?

字典 dict

什么是字典:

1. 字典是一种可变的容器,可以存储任意类型的数据

2. 字典中的每个数据都是用"键"(key) 进行索引的,而不象序列,可以用整数下标进行索引

3. 字典的数据没有先后关系,字典的存储是无序的

4. 字典中的数据是以键-值(key-value)对 的形式进行存储的

5. 字典的键不能重复,且只能用不可变类型作为字典的键

字典的字面值表示方法:

以大括号,花括号{} 括起来, 以冒号(:) 分隔键-值对, 各键值对之间用逗号分隔开

创建空字典:

d = {} # d绑定空字典

创建非空字典:

d = {"name": "weimingze", "age": 35}

d = {True: "真值", False: "假值"}

d = {"class1": ["老魏", "张某某", "李某某"]}

d = {(2008, 8, 8): "北京奥运会纪念日"}

d = {"a": 1, "b": 2, "a": 1.1}

字典的值可以为任意类型:

bool, str, int, float, complex, tuple, list, dict ,以及后面要学到的 集合,函数,类对象....

示例:

d = {"a": tuple(range(10))}

dict 的构造(创建)函数

dict() 生成一个空的字典,等同于 {}

dict(iterable) 用可迭代对象初始化一个字典

dict(**kwargs) 关键字参数形式生成一个字典

示例:

d = dict()

d = dict([("name", "weimingze"), ("age", 35)])

# 关键字传参生成一个字典

d = dict(name="weimingze", age=35)

L = [(1, 2), (3, 4), "AB", [5, 6]]

d = dict(L) # {1: 2, 3: 4, 5: 6, "A": "B"}

可变类型(不能充当字典的键):

列表,字典,集合set,字节数组(bytearray,后面会讲)

字典的访问:

字典的键索引

用[]访问字典内的成员

语法:

字典[键]

示例:

d = {"name": "tarena", "age": 20}

print("姓名:", d["name"], "年龄:", d["age"])

字典的特点:

添加,删除,查找速度快

添加和修改元素

字典[键] = 值

示例:

d = {}

d["name"] = "tarena" # 创建新的键值对

d["age"] = 20 # 创建新的键值对

d["age"] = 21 # 修改age键所对应的值

说明:

字典的键索引赋值时:

1. 键不存在,创建键,并绑定键对应的值

2. 键存在,修改键绑定的值

del 语句

可以用来删除字典的键-值对

语法:

del 字典[键]

示例:

d = {"name": "tarena", "age": 20}

del d["age"]

in /not in运算符:

1. 可以用in运算符来判断一个键是否存在于字典中,如果存在则返回True, 否则返回False

2. not in 与 in 的返回值相反

示例:

d = {"name": "tarena", "age": 20}

"name" in d # 返回True

20 in d # 返回False

字典的迭代访问:

字典是可迭代对象, 字典只能对键进行迭代

示例:

d = {"name": "tarena", "age": 20}

for x in d:

print(x)

可以用于字典的内建(built-in)函数:

len(x) 返回键值对的个数

max(x) 返回键的最大值

min(x) 返回键的最小值

sum(x) 返回键的和

any(x) 真值测试,只对键测试

all(x) 真值测试,对键测试

练习:

输入一段字符串, 打印出这个字符串中出现过的字符及出现过的次数,如:

输入:abcdabcaba

a : 4次

b : 3次

d : 1次

c : 2次

注:不要求打印的顺序

字典的方法(method)

D代表字典对象

D.clear() 清空字典

D.pop(key) 移除键,同时返回此键所对应的值的引用关系

D.copy() 返回字典D的副本,只复制一层(浅拷贝)

D.update(D2)将字典D2合并在D中,如果键相同,则此键的值取D2的值作为新值

D.get(key, default) 返回键key所对应的值,如果没有此键,则返回default

D.keys() 返回可迭代的dict_keys集合对象

D.values() 返回可迭代对dict_values值对象

D.items() 返回可迭代的dict_items对象

示例:

d = {1: "one", 2: "two", 3: "three"}

for x in d:

print(x) # 键值对元组

字典推导式 dict comprehesion

作用:

用可迭代对象生成一个新的字典

语法:

{键表达式 : 值表达式

for 变量列表 in 可迭代对象 [if 真值表达式]}

注:

  [] 的内容代表可省略

示例:

# 生成一个字典, 键为数值(1~10), 值为数字的平方

d = {x : x**2 for x in range(1, 11)}

L = ["tarena", "xiaozhang", "xiaowei"]

# 字符串作为键,字符串长度作为值:

d = {x : len(x) for x in L}

字典推导式嵌套

嵌套方式与列表推导式相同

语法:

{键表达式 : 值表达式

for 变量列表 in 可迭代对象 [if 真值表达式]

for 变量列表 in 可迭代对象 [if 真值表达式]

}

练习:

1. 写一个程序,先输入一些单词和解释,将单词作为键,将解释作为值,将这此数据输入字典中. 以输入单词为空结束输入.

然后循环提示请输入要查找的词:

如果不存在于字典中提示没找到,如果存在,打印出解释

2. 输入任意5个学生的 姓名,年龄,成绩,每个学生的信息存入字典,然后把学生信息的字典放入列表中.

每个学生的信息需要手动输入

内部存储格式如下:

[{"name":"tarena", "age": 20, "score": 99}, {"name":"xiaozhang", "age": 23, "score": 100}, .... ]

1) 打印所有学生信息如下:

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

| 姓 名 | 年 龄 | 成绩 |

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

| tarena | 20 | 99 |

| xiaozhang | 23 | 100 |

| name2 | 28 | 70 |

| .... | ... | ... |

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

2) 输入学生的分数线,把高于这个分数线的学生信息打印出来

如输入:90 打印如下

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

| 姓 名 | 年 龄 | 成绩 |

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

| tarena | 20 | 99 |

| xiaozhang | 23 | 100 |

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

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如有侵权行为,请第一时间联系我们修改或删除,多谢。

CopyRight © 外贸领航 2023 All Rights Reserved.