挑战AI全栈第四天!(终于双休了)
python 中默认有4种容器
列表list
字典 dict
集合 set
元组 tuple
Python 支持多种复合数据类型,可将不同值组合在一起。最常用的列表 ,是用方括号标注,逗号分隔的一组值。列表可以包含不同类型的元素,但一般情况下,各个元素的类型相同
列表是一种可以存储任意个各种类型的序列容器
列表内的数据有先后顺序关系
列表是可变的容器
创建列表的字面值
>>> L = [] # 创建一个空的列表
>>> L = ['北京', '上海', '广州', '西安'] # 创建一个含有4个字符串的列表
>>> L = [1, 'Two', 3.14, True, False, None]
>>> L = [1, 2, [3.1, 3.2], 4] # 含有四个元素的列表,第三个元素是列表
>>> L2 = [
['姓名','语文成绩','数学成绩'],
['小王', 90, 100],
['牛犇', 59, 26]
]
注: python 中的 (), [], {} 和 三引号字符串都要成对出现, 可以换行
创建列表的构造函数 list
L = list() # L = []
L = list("ABC") # L = ['A', 'B', 'C']
L = list(range(5)) # L = [0, 1, 2, 3, 4]
列表list同字符串str都是序列, 他们的运算规则基本相同
+ 用于拼接列表
>>> [1, 2, 3] + [4, 5, 6] # [1, 2, 3, 4, 5, 6]
+= 追加
语法
列表 += 可迭代对象
>>> L = [1, 2, 3]
>>> L += [4, 5] # L = [1, 2, 3, 4, 5]
>>> L = [1, 2, 3]
>>> L += "ABC" # L = [1, 2, 3, 'A', 'B', 'C']
>>> L += range(2)
* 用于生产重复的列表
>>> [1, 2] * 3 # [1, 2, 1, 2, 1, 2]
>>> L = [5, 6]
>>> L *= 3 # L = [5, 6, 5, 6, 5, 6]
== != 用于比较
>>> [1, 2, 3] == [1, 2, 3] # True
>>> [1, 2, 3] != [3, 2, 1] # True
in /not in 用于判断一个数据元素是否在列表中
>>> "hello" in [1, "hello", 'world']
True
>>> '红楼梦' in ['三国演义', '西游记']
False
列表[整数表达式]
L = [1, 2, 3, 4, 5, 6]
print(L[0]) # 1
print(L[-1]) # 6
与字符串的索引一样,列表索引从 0 开始,第二个索引是 1,依此类推。
索引也可以从尾部开始,最后一个元素的索引为 -1,往前一位为 -2,以此类推。
list = ['red', 'green', 'blue', 'yellow', 'white', 'black']
print( list[-1] )
print( list[-2] )
print( list[-3] )
列表[(开始索引b):(终止索引e)(: (步长s))]
() 里的内容代表可以省略
x = [1, 2, 3, 4, 5, 6, 7, 8]
y1 = x[:4] # y1 = [1, 2, 3, 4]
y2 = x[::2] # y2 = [1, 3, 5, 7]
y3 = x[::-1] # y3 = [8, 7, 6, 5, 4, 3, 2, 1]
列表是可变的容器(不同于字符串)
列表是可变的
字符串是不可变的
list = ['openAI', 'hqyj', "Zhihu", "Taobao", "Wiki"]
# 读取第二位
print (list[1])
# 从第二位开始(包含)截取到倒数第二位(不包含)
print (list[1:-2])
# 从下标2开始(包含2)到最后一个
print (list[2:])
# 从下标0开始到下标3结束(左闭右开)
print (list[:3])
方法
方法名(L代表列表) | 说明 |
---|---|
L.append(x) | 向列表的末尾追加单个数据 |
L.insert(index, obj) | 将某个数据obj 插入到 index这个索引位置的数据之前 |
L.extend(可迭代对象) | 等同于: L += 可迭代对象,如列表、元组、字符串、集合等 |
示例
mylist1 = [1, 3, 4] # 目标是变成 [1, 2, 3, 4, 5]
mylist1.append(5) # mylist1 = [1, 3, 4, 5]
mylist1.insert(1, 2) # mylist1 = [1, 2, 3, 4, 5]
mylist1.extend(range(6, 10)) # mylist1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
用索引赋值可以改变列表内的数据
列表[整数表达式] = 表达式
示例
mylist2 = [1, 1.99, 3] # 把1.99 改为2
mylist2[1] = 2 # mylist2 = [1, 2, 3]
方法
方法 | 说明 |
---|---|
L.remove(x) | 从列表L中删除第一次出现在列表中的数据元素,如果x不存在则报错 |
L.pop() | 根据索引删除元素,并返回该元素。若不提供索引,默认删除最后一个元素 |
L.clear() | 清空列表 |
示例
L = [1, 2, 3, 4, 2, 2, 3, 4]
L.remove(3) # L = [1, 2, 4, 2, 2, 3, 4]
L.remove(3) # L = [1, 2, 4, 2, 2, 4]
L.remove(3) # 报错了
L.clear() # L = []
list1 = ['Google', 'Baidu', 'Taobao']
list1.pop()
print ("列表现在为 : ", list1) # 列表现在为 : ['Google', 'Baidu']
list1.pop(1)
print ("列表现在为 : ", list1) # 列表现在为 : ['Google']
del 语句删除指定位置的数据元素
语法
del 变量名 # 删除变量,同时解除变量绑定的对象
del 列表[整数表达式]
示例
L = ['张飞', '赵云', '鲁班7号', '孙悟空']
del L[2]
print(L) # L = ['张飞', '赵云', '孙悟空']
del L # 删除 L 变量
print(L) # NameError: name 'L' is not defined
print(L[0]) # 取值
即在列表里创建其它列表
a = ['a', 'b', 'c']
n = [1, 2, 3]
x = [a, n]
print(x)#[['a', 'b', 'c'], [1, 2, 3]]
print(x[0])#['a', 'b', 'c']
print(x[0][1])#b
序号 | 函数 |
---|---|
1 | len(list)列表元素个数 |
2 | max(list)返回列表元素最大值 |
3 | min(list)返回列表元素最小值 |
4 | list(seq)将元组转换为列表 |
运算 | 结果 |
---|---|
s.index(x[, i[, j]]) |
x 在 s 中首次出现项的索引号(索引号在 i 或其后且在 j 之前) |
s.count(x) |
x 在 s 中出现的总次数 |
s.append(x) |
将 x 添加到序列的末尾 (等同于 s[len(s):len(s)] = [x] ) |
s.clear() |
从 s 中移除所有项 (等同于 del s[:] ) |
s.copy() |
创建 s 的浅拷贝 (等同于 s[:] ) |
s.extend(t) 或 s += t |
用 t 的内容扩展 s (基本上等同于 s[len(s):len(s)] = t ) |
s.insert(i, x) |
在由 i 给出的索引位置将 x 插入 s (等同于 s[i:i] = [x] ) |
s.pop([i]) |
提取在 i 位置上的项,并将其从 s 中移除 |
s.remove(x) |
删除 s 中第一个 s[i] 等于 x 的项目。 |
s.reverse() |
就地将列表中的元素逆序。 |
s.sort( key=None, *reverse=False*) |
对列表内的数据进行排序, reverse=False 升序排序,否则是降序排序 |
示例:
s = [1, "二", 3]
value = s.pop(1) # s= [1, 3]; value = '二'
>>> s = [1, 2, 3, 5]
>>> s.reverse() # 反转
>>> s
[5, 3, 2, 1]
>>> s = [1, 2, 3, 4, 2, 2, 3, 4]
>>> s.index(3) # 返回第一次出现的位置的索引
2
>>> s.index(3, 4)
6
>>> s.index(100) # 触发异常,要用try 语句处理
Traceback (most recent call last):
File "", line 1, in
ValueError: 100 is not in list
>>> s.count(3) # 在列表 s 中 找出所有值为3 的元素的个数,并返回
2
>>> s.count(2)
3
>>> L1 = [2, 4, 6, 8, 9, 1]
>>> L1.reverse()
>>> L1
[1, 9, 8, 6, 4, 2]
>>> s.sort() # 排序,默认是升序排序
>>> s
[1, 2, 2, 2, 3, 3, 4, 4]
>>> s.sort(reverse=True)
>>> s
[4, 4, 3, 3, 2, 2, 2, 1]
元组是不可改变的列表
同列表list 一样,元组可以存放任意类型的数据
但是,一旦创建将不可修改,包括添加、删除或更改其中的元素
元组使用小括号 ( ),列表使用方括号 [ ]
创建元组的字面值
用小括号() 括起来,单个元素括起来后加逗号来区分单个元素还是元组
t = () # 空元组
t = (100,) # 含有一个数据元素的元组
t = 100, # 含有一个数据元素的元组,元组中只包含一个元素时,需要在元素后面添加逗号 ,否则括号会被当作运算符使用
t = (1, 2, 3) # 含有三个数据元素的元组
t = ( 'hqyj', 2004) # 存放不同类型的元组
t = 1, 2, 3 # 含有三个数据元素的元组
type(x) 函数用来返回数据x的类型
创建元组的函数 tuple
t = tuple() # t = ()
t = tuple(range(5)) # t = (0, 1, 2, 3, 4)
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组
tup = ('openAI', 'hqyj', 100, 200)
print (tup)
del tup
print (tup)#name 'tup' is not defined
元组与字符串类似,下标索引从 0 开始,可以进行截取,组合等。
tup1 = ('python', 'hqyj', 100, 200)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print (tup1[0])#python
print (tup2[1:5])#(2, 3, 4, 5)
print (tup2[:4])#(1, 2, 3, 4)
print (tup2[2:])#(3, 4, 5, 6, 7)
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 创建一个新的元组
tup3 = tup1 + tup2
print (tup3)
>>> t = (1, 2, 3) + (4, 5, 6)
>>> t += (7, 8, 9) # 等同于 t = t + (7, 8, 9)
>>> t = t * 2
>>> t *= 2
>>> 5 in t
True
所谓元组的不可变指的是元组所指向的内存中的内容不可变。
tup = (1, 2, 3, 4, 5, 6, 7)
tup[1] = 100
print(tup)#报错'tuple' object does not support item assignment
Python元组包含了以下内置函数
序号 | 方法 | 描述 |
---|---|---|
1 | len(tuple) | 返回元组中元素个数。 |
2 | max(tuple) | 返回元组中元素最大值。 |
3 | min(tuple) | 返回元组中元素最小值。 |
4 | tuple(list) | 将列表转换为元组。 |
元组常用的方法
运算 | 结果 |
---|---|
s.index(x[, i[, j]]) | 元素x 在 s 中首次出现项的索引号,i (可选):搜索的起始索引。如果省略,将从元组的开头开始搜索,j (可选):搜索的结束索引。如果省略,将搜索到元组的末尾 |
s.count(x) | x 在 s 中出现的总次数 |
字典是一种可变容器模型,且可存储任意类型对象。
字典的数据都是以键(key)-值(value)对的形式进行映射存储.
字典的每个键值对( key:value )用冒号分割,每个对之间用逗号分割,整个字典包括在花括号 {} 中
d = {key1 : value1, key2 : value2, key3 : value3 }
字典的数据在Python 3.7及更高版本中,字典是有序的;3.6之前的版本中,字典是无序的
字典的键不能重复,且只能用不可变类型作为字典的键
字典中的数据只能用"键"key 进行索引,不能用整数进行索引
创建字典的字面值:
字典的表示方式以 {} 括起来, 以英文的冒号 (:) 分隔键值对,各键值对之间用逗号(,)分隔
d = {} # 创建空字典
d = {'name': "weimingze", "age": 35}
d = {'a': [1, 2, 3]}
d = {'b': {"bb": 222}}
d = {1:'壹', 2:'贰', 5:'伍'}
d = {(1, 2, 3):'壹贰伍'}
以下写法会存在问题
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字。
d = {'a': 1, 'b': 2, 'a': 3} # 字典的键不能重复 d = {'a': 3, 'b': 2}
d = {[1, 2, 3]: 'a'} # 不能用可变类型作为字典的键 # 报错
字典的创建函数 dict()
d = dict() # d = {}
d = dict([("name", "小王"), ("age", 35)]) # {'name': '小王', 'age': 35}
d = dict(a=1, b=2, c=3) # {'a':1, 'b':2, 'c':3}
d = dict([1, 2, 3, 4]) # 错
添加和修改字典的元素
语法
字典[键key] = 表达式
键不存在, 会创建键并绑定键对应的值
键存在, 会改变键对应的值
示例:
d = {}
d['name'] = 'tarena' # 添加键值对 d = {'name': 'tarena'}
d['age'] = 18 # d = {'name': 'tarena', 'age': 18}
d['age'] = 19 # 改变 'age' 键对应的值 d = {'name': 'tarena', 'age': 19}
字典的键索引
语法
字典[键key]
用键索引可以查看字典中的数据
示例:
d = {'one': 1, 'two': 2}
print(d['two'])
如果用字典里没有的键访问数据,会输出错误
mydic = {'Name': 'hqyj', 'Age': 7, 'Class': 'First'}
print (mydic['Alice'])
in / not in 运算符
用 in 可以判断一个键是否存在于字典中,如果存在返回 True, 否则返回 False
not in 与 in 相反
示例
>>> d = dict(a=1, b=2) # d = {'a': 1, 'b': 2}
>>> 'a' in d
True
>>> 1 in d
False
>>> 'hello' not in d
True
能删单一的元素也能清空字典,清空只需一项操作
显式删除一个字典用del命令
语法
del 字典[键]
示例
dic = {'a':1, 'b':2, 'c':3, 'd':4, 'e':5}
# 删除指定的键
del dic['a']
print(dic)
# 删除指定的键,并可选地返回其值
v1 = dic.pop('b')
print(v1)
print(dic)
# 删除并返回最后一个插入的键值对
key,value = dic.popitem()
print(key,value)
print(dic)
# 删除字典中的所有项
dic.clear()
print(dic)
# 删除字典
del dic
print(dic) #NameError: name 'dic' is not defined
字典值可以是任何的 python 对象,既可以是标准的对象,也可以是用户定义的,但键不行。
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
mydic = {'Name': 'jack', 'Age': 27, 'Name': 'karen'}
print (mydic['Name'])
2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表等就不行
mydic1 = {97:"a",98:"b"}
mydic2 = {"name":"karen","age":27}
mydic3 = {['Name']: 'karen', 'Age': 27}
print(mydic3[['Name']])#报错unhashable type: 'list'
注: python 中有四种可变类型
列表 list
字典dict
集合 set
字节数组 bytearray
字典是可迭代对象, 字典只能对所有的键进行迭代访问,默认访问键
d = {'name': 'tarena', 'age': 19}
for k in d:
print(k)
name
age
for k in d:
print("key=", k, 'value=', d[k])
key= name value= tarena
key= age value= 19
可以使用 for
循环来遍历字典的键和值。可以使用 dict.keys()
方法遍历键,使用 dict.values()
方法遍历值,使用 dict.items()
方法同时遍历键和值。
1.遍历字典的键:
my_dict = {'a': 1, 'b': 2, 'c': 3}
for key in my_dict.keys():
print(f"Key: {key}")
#输出:Key: a Key: b Key: c
2.遍历字典的值:
my_dict = {'a': 1, 'b': 2, 'c': 3}
for value in my_dict.values():
print(f"Value: {value}")
# 输出:Value: 1 Value: 2 Value: 3
3.同时遍历字典的键和值:
my_dict = {'a': 1, 'b': 2, 'c': 3}
for key, value in my_dict.items():
print(f"Key: {key}, Value: {value}")
# 输出:Key: a, Value: 1 Key: b, Value: 2 Key: c, Value: 3
操作字典的函数:
序号 | 函数 | 描述 |
---|---|---|
1 | len(dict) | 计算字典元素个数,即键的总数。 |
2 | str(dict) | 输出字典,可以打印的字符串表示。 |
3 | type(variable) | 返回输入的变量类型,如果变量是字典就返回字典类型。 |
字典的方法:
序号 | 函数及描述 |
---|---|
1 | dict.clear()删除字典内所有元素 |
2 | dict.copy()返回一个字典的浅复制 |
3 | dict.fromkeys(seq)创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值,如果未提供,则所有键的值将被设置为 None |
4 | dict.get(key, default=None)返回指定键的值,如果键不在字典中返回 default 设置的默认值 |
5 | key in dict如果键在字典dict里返回true,否则返回false |
6 | dict.items()以列表返回一个视图对象 |
7 | dict.keys()返回一个视图对象 |
8 | dict.setdefault(key, default=None)和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
9 | dict.update(dict2)把字典dict2的键/值对更新到dict里 |
10 | dict.values()返回一个视图对象 |
11 | pop(key,default)删除字典 key(键)所对应的值,返回被删除的值。 |
12 | popitem()返回并删除字典中的最后一对键和值。 |
示例
original_dict = {'a': 1, 'b': [1, 2, 3]}
shallow_copied_dict = original_dict.copy()
# 修改原始字典中的可变对象
# 对于可变对象(如列表、字典),修改原始字典中的值会影响浅复制的字典,因为它们引用的是同一个对象
original_dict['b'].append(4)
# 对于不可变对象(如整数、字符串、元组),修改原始字典中的值不会影响浅复制的字典。
original_dict['a']=2
print(original_dict) # 输出: {'a': 2, 'b': [1, 2, 3, 4]}
print(shallow_copied_dict) # 输出: {'a': 1, 'b': [1, 2, 3, 4]}
# 创建一个新字典,键为列表中的元素,值为None
keys = ['a', 'b', 'c']
new_dict = dict.fromkeys(keys)
print(new_dict) # 输出: {'a': None, 'b': None, 'c': None}
# 创建一个新字典,键为列表中的元素,值为指定的值
value = 0
new_dict = dict.fromkeys(keys, value)
print(new_dict) # 输出: {'a': 0, 'b': 0, 'c': 0}
# 如果提供的 value 是不可变对象(如整数、字符串、元组等),每个键将有一个独立的值副本
new_dict['a'] = 1
print(new_dict)
# 如果提供的值是可变对象(如列表、字典等),那么所有键将共享同一个可变对象。这意味着对这个可变对象的任何修改都会反映在所有键的值上。
keys = ['a', 'b', 'c']
value = []
new_dict = dict.fromkeys(keys, value)
print(new_dict) # 输出: {'a': [], 'b': [], 'c': []}
# 修改可变对象
new_dict['a'].append('x')
print(new_dict) # 输出: {'a': ['x'], 'b': ['x'], 'c': ['x']}
# 返回指定键的值,如果键不在字典中返回 default 设置的默认值
dict = {'a': 1, 'b': 2}
print(dict.get('c'))
print(dict.get('c', 0))
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
# 使用 dict.update() 更新 dict1
# 如果 dict1 中已经存在 dict2 的键,则 dict1 中的值会被 dict2 中的值覆盖
dict1.update(dict2)
print(dict1) # 输出: {'a': 1, 'b': 3, 'c': 4}
列表和元组是有序的,字典的存储在Python3.7以后是有序的
列表、字典是可变的,元组是不可变的
字典的键索引速度快,列表的索引速度也快
d = {'a':1, 'b':2, .........}
print(d['c']) # 速度快
L = [7, 5, 1, ........]
print(L[10009]) # 速度快
列表和元组是顺序存储的,字典是散列存储的
字典的 in / not in 运算符快于列表的 in / not in 运算符
L = ['孙悟空', '赵云', '吕布', ...]
if '王昭君' in L: # 速度慢
pass
D = {'孙悟空':'花果山', '赵云':'长山', '吕布':'石家庄', .....}
if '王昭君' in D: # 速度快
pass
集合是可变的容器,固定集合是不可变的集合
集合相当于只有键没有值的字典
集合是无序的不重复元素的存储结构
集合内的数据都是唯一的,不可变的
创建集合的方式
空集合 set()
非空集合 用 {} 括起来,值用逗号分隔开
s = set() # 用函数空集合
s = {1, 2, 3, 4} # 创建非空集合的字面值
s = set(range(5)) # 调用 set(可迭代对象) 来创建集合 s = {0, 1, 2, 3, 4}
s = set("ABC") # s = {'B', 'C', 'A'}
s = set("ABCCCCCCC") # s = {'B', 'C', 'A'}
s = set(['ABC']) # s = {'ABC'} 使用 set()函数从列表创建集合
s = set((4, 5, 6, 7))# 使用 set()函数从元组创建集合
创建固定集合frozensets的方式
fs = frozenset() # 空固定集合 fs = frozenset()
fs = frozenset([1, 2, 3]) # fs = frozenset({1, 2, 3})
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。
s.add( x ) 添加元素到集合
s.update( x ) 添加元素到集合,且参数可以是列表,元组,字典等 ,x 可以有多个,用逗号分开
s1 = set((4, 5, 6, 7))
s1.add(100)
print(s1) # 输出:{100, 4, 5, 6, 7}
s1.update([200,300])
print(s1) # 输出:{100, 4, 5, 6, 7, 200, 300}
s.remove( x ):将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。
s.discard( x )):将元素 x 从集合 s 中移除,如果元素不存在,不会发生错误。
s.pop()):对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除。
s1 = {10, 20, 30}
s1.remove(20)
print(s1)
s1.remove(40)#报错
s1 = {10, 20, 30}
s1.discard(20)
print(s1)
s1.discard(40)
s1 = {10, 20, 30}
s1.pop()
print(s1)
del s1 # 也可以直接删除整个集合
注意:集合(set)没有索引查看的功能。集合是一种无序、不可重复的数据结构,用于存储唯一的元素。由于集合是无序的,所以不能通过索引来访问其中的元素。所以也没有对应的修改功能。
x in s 判断元素 x 是否在集合 s 中,存在返回 True,不存在返回 False。
s1 = {10, 20, 30}
print(20 in s1)
集合的方法
方法 | 描述 |
---|---|
add() | 为集合添加元素 |
clear() | 移除集合中的所有元素 |
copy() | 拷贝一个集合 |
difference() | 返回多个集合的差集,返回一个新集合 |
difference_update() | 移除集合中的元素,该元素在指定的集合也存在。直接修改第一个集合 |
discard() | 删除集合中指定的元素 |
intersection() | 返回集合的交集,返回一个新集合 |
intersection_update() | 返回集合的交集。直接修改第一个集合 |
isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 |
issubset() | 判断指定集合是否为该方法参数集合的子集。 |
issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
pop() | 随机移除元素 |
remove() | 移除指定元素 |
symmetric_difference() | 返回两个集合中不重复的元素集合。 |
symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。 |
union() | 返回两个集合的并集 |
update() | 给集合添加元素 |
len() | 计算集合元素个数 |
示例:
# 1.len()
s1 = {10, 20, 30}
print(len(s1))
#2. clear()
s1 = {10, 20, 30}
s1.clear()
print(s1)
#3.union()
set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = {5, 6, 7}
result = set1.union(set2, set3)
print(result) # 输出:{1, 2, 3, 4, 5, 6, 7}
容器总结
类型
列表 list
元组 tuple
字典 dict
集合 set / 固定集合 frozenset
可变和不可变
可变的容器
list dict set
不可变的容器
tuple, frozenset
有序和乱序
有序
list tuple
无序
dict set frozenset
Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。
Python 支持各种数据结构的推导式:
列表(list)推导式
字典(dict)推导式
集合(set)推导式
元组(tuple)推导式
作用
用简单的表达式方式来创建列表
语法规则
[ 表达式 for 自定义变量 in 可迭代对象 ]
# 或
[ 表达式 for 自定义变量 in 可迭代对象 if 真值表达式 ]
示例
# 生成一个列表, 里面有 100 个数是[1, 4, 9, 16, 25, ...]
# 用 for 语句实现
L = []
for x in range(1, 101):
L.append(x ** 2)
print(L)
# 用列表推导式
L2 = [ x ** 2 for x in range(1, 101)]
print(L2)
L3 = []
for x in range(1, 101):
if x % 2 == 0:
L3.append(x ** 2)
L3 = [ x ** 2 for x in range(1, 101) if x % 2 == 0] # 取出所有的偶数
# L3 = [4, 16, 36, ...]
字典推导基本格式:
{ 键表达式: 值表达式 for 元素 in 集合 }
{ 键表达式: 值表达式 for 元素 in 集合 if 条件 }
# 将列表中各字符串值为键,各字符串的长度为值,组成键值对
listdemo = ['karen','jack', 'marry']
newdict = {key:len(key) for key in listdemo}
print(newdict)#{'karen': 5, 'jack': 4, 'marry': 5}
#提供三个数字,以三个数字为键,三个数字的平方为值来创建字典:
dic = {x: x**2 for x in (2, 4, 6)}
print(dic)#{2: 4, 4: 16, 6: 36}
集合推导式基本格式:
{ 表达式 for 元素 in 序列 }
{ 表达式 for 元素 in 序列 if 条件 }
#计算数字 1,2,3 的平方数:
setnew = {i**2 for i in (1,2,3)}
print(setnew)#{1, 4, 9}
#判断不是 abc 的字母并输出:
a = {x for x in 'abracadabra' if x not in 'abc'}
print(a)#{'d', 'r'}
元组推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的元组。
元组推导式和列表推导式的用法也完全相同,只是元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是中括号 [],另外元组推导式返回的结果是一个生成器对象。
元组推导式基本格式:
(表达式 for 元素 in 序列 )
(表达式 for 元素 in 序列 if 条件 )
#生成一个包含数字 1~9 的元组
a = (x for x in range(1,10))
print(a)#返回的是生成器对象
print(tuple(a))#使用 tuple() 函数,可以直接将生成器对象转换成元组