homework01
– 用一个列表保存54张扑克牌,先洗牌,import random suits = [ '♠' , '♥' , '♣' , '♦' ] faces = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10','J', 'Q', 'K'] # 列表生成式 cards = [f'{suit}{face}' for suit in suits for face in faces] '''等于 for suit in suits: for face in faces: cards = [f'{suit}{face}'] ''' cards.append('大王') cards.append('小王') # 随机打乱列表的元素 random.shuffle(cards) players = [[] for _ in range(3)] # 创造列表生成式 for _ in range(17): for i in range(3): # pop()随机删除一个元素并返回该值 players[i].append(cards.pop()) players[0].extend(cards) for player in players: # 列表循环生成式的寻找元素 player.sort(key = lambda x: x[1:]) for card in player: print(card, end=' ') print()
example01
- 保存5个学生,3门课程的成绩
import random names = ('关羽', '张飞', '赵云', '马超', '黄忠') courses = ('语文', '数学', '英语') scores = [[random.randrange(60,101) for _ in range(len(courses))] for _ in len(nums)] print(scores) # for i, name in enumerate(names): # for j, course in enumerate(courses): # print(f'{name}的{course}成绩: {scores[i][j]}')
统计每个学生的平均成绩
for i,name in enumerate(names): print(f'{name}平均成绩为{sum(scores[i])/len(couses):.1f}') # scores是二元组,但是可以一元组形式存在
统计每门课的最高分和最低分
for j, course in enumerate(courses): temp = [scores[i][j] for i in range(len(names))] # for i in range(len(names)): # temp.append(scores[i][j]) print(f'{course}的最高分: {max(temp)}') print(f'{course}的最低分: {min(temp)}')
不可变的容器,元组也是多个元素按照一定的顺序构成的序列。。元组和列表的不同之处在于,元组是不可变类型,这就意味着元组类型的变量一旦定义,其中的元素不能再添加或删除,而且元素的值也不能进行修改。定义元组通常使用()
字面量语法,也建议大家使用这种方式来创建元组。
fruits1 = ('apple', 'banana', 'grape') print(type(fruits1)) # 其中命名变量时,不能命名为tuple(关键字,tuple()函数)
# 重复运算 print(fruits1 * 3) # 这里不i改变元组本身 # 成员运算 print('apple' in fruits1) print('grape' not in fruits1) # 看代码是否在元组里,输出结果True or Flase # 找元素的数量 print(len(fruitsl) # 3 # 合并运算 fruits2 = ('pitaya', 'litchi') fruits3 = fruits1 + fruits2 print(fruits3) # 索引和切片 print(fruits1[2],fruits1[-1]) # grape grape # TypeError: 'tuple' object does not support item assignment # fruits3[4] = 'shit' print(fruits3[1:4]) # 从1取到位置4之前 print(fruits3[1:4:2]) # 从1取到位置4,并步长为2 print(fruits3[::-1]) # 将列表反转 # tuple[起始位置:终止位子(不取最后一个):步长或反取值] # 索引和求取该值出现次数 print(fruits3.index('apple')) # 取该元素所在位子下标 print(fruits3.count('apple')) # 统计该元素出现次数
由于元组是不可变的容器,当执行该语句时就会报错,并提示元组不具备这样的属性。
定义一元组时,需要在元素后面加一个‘,
’,这样才是定义数组,不然就是输入什么类型就是什么类型,例子如下
# AttributeError: 'tuple' object has no attribute 'append' # fruits3.append('durian') # AttributeError: 'tuple' object has no attribute 'pop' # fruits3.pop(0) # AttributeError: 'tuple' object has no attribute 'remove' # fruits3.remove('banana') # 空元组 a = () print(type(a)) # <class 'tuple'> # 不是元组 b = ('hello') print(type(b)) # <class 'str'> c = (100) print(type(c)) # <class 'int'> # 一元组 d = ('hello', ) print(type(d)) # <class 'tuple'> e = (100, ) print(type(e)) # <class 'tuple'>
# 打包 a, *_, b = 5, 10, 15, 20, 25 print(a) # 5 print(c) # 25 # 可以得出处两边所有值外打包了中间的值,并形成列表 *a, b, c = 5, 10, 15, 20, 25 print(a) print(b) print(c) # [5, 10, 15] 20 25 a, b, *c = 5, 10, 15, 20, 25 print(a) print(b) print(c) # 5 10 [15, 20, 25] ##解包 a = 1, 10, 100, 1000 # i, j, k = a # ValueError: too many values to unpack (expected 3) # i, j, k, l, m, n = a # ValueError: not enough values to unpack (expected 6, got 4) a = 1, 10, 100, 1000 i, j, *k = a print(i, j, k) # 1 10 [100, 1000] i, *j, k = a print(i, j, k) # 1 [10, 100] 1000 *i, j, k = a print(i, j, k) # [1, 10] 100 1000 *i, j = a print(i, j) # [1, 10, 100] 1000 i, *j = a print(i, j) # 1 [10, 100, 1000] i, j, k, *l = a print(i, j, k, l) # 1 10 100 [1000] i, j, k, l, *m = a print(i, j, k, l, m) # 1 10 100 1000 []
# a = b, b = a`ROT_TWO` a, b = b, a # ROT_THREE a, b, c = b, c, a
a = '\'hello, \a\tworld\b\b\'' b = "\"hello, \n\nworld\"" # '\n'转行 '\t'空格 、'\b'删除最后一个元素,有几个\b就删几个 \是转义的意思 c = ''' 床前明月光, 疑似地上霜。 举头望明月, 低头思故乡。 ''' print(a) print(b) print(c) # 原始字符串(每个字符都是它原始的含义,没有转移字符) d = r'c:\Users\Administrator\abc\hello.py' print(d) # 带占位符的字符串(格式化字符串) e = f'文件路径: {d}' print(e) s1 = '\141\142\143\x61\x62\x63' # 二进制 x开头的十进制 print(s1) # ASCII ---> GB2312 ---> GBK ---> Unicode(UTF-8) s2 = '\u9a86\u660a' print(s2)
列表和元组都是容器型的数据类型,即一个变量可以保存多个数据。列表是可变数据类型,元组是不可变数据类型,所以列表添加元素、删除元素、清空、排序等方法对于元组来说是不成立的。但是列表和元组都可以进行拼接、成员运算、索引和切片这些操作,就如同之前讲到的字符串类型一样,因为字符串就是字符按一定顺序构成的序列,在这一点上三者并没有什么区别