#学习python的第二周
——第一天
作业的修正
-
输入三个整数,按照从大到小的顺序输出
a = int(input('a = ')) b = int(input('b = ')) c = int(input('c = ')) if a < b: a, b = b, a if a < c: a, c = c, a if c > b: b, c = c, b print(a, b, c)
-
向列表中添加10个随机整数,找出其中第2大的元素
import random nums = [] for _ in range(): temp = random.randrange(1,100) nums.append(temp) print(nums) max_value = max(nums) #通过remove操作从列表中删除指定的元素 nums.remove(max_value) #删除列表中的最大值 print(max(nums))
这种方法其实不是最优,从这个可以通过思想的代码得出相对最优的代码
nums = [random.randrange(1, 100) for _ in range(10)] # nums = [i for i in range(1, 101, 2)] print(nums) m1, m2 = nums[0], nums[1] if m1 < m2: m1, m2 = m2, m1 for num in nums[2:]: if num > m1: m1, m2 = num, m1 elif num == m1: pass elif num > m2: m2 = num print(m2)
生成推导式
1. # 列表的生成式(推导式)---> 写法简明,效率更高 nums = [random.randrange(1, 100) for _ in range(10)] 等于 for _ in range(): temp = random.randrange(1,100) nums.append(temp) 2.nums = [i for i in range(1, 101, 2)]
列表
列表的定义
在Python中,列表是由一系元素按特定顺序构成的数据序列,这样就意味着定义一个列表类型的变量,可以保存多个数据,而且允许有重复的数据。跟上一课我们讲到的字符串类型一样,列表也是一种结构化的、非标量类型,操作一个列表类型的变量,除了可以使用运算符还可以使用它的方法。
list()函数可以将序列变成列表——即创造列表的构造器。
1.列表的创造
items1 = list(range(1, 10))
print(items1) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
items2 = list('hello')
print(items2) # ['h', 'e', 'l', 'l', 'o']
# 创建列表的方式一:字面量语法
list1 = ['apple', 'orange', 'pitaya', 'durian']
print(list1)
#['apple', 'orange', 'pitaya', 'durian']
# 创建列表的方式二:构造器语法
list2 = list(range(1, 10))
print(list2)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 创建列表的方式三:生成式(推导式)语法
list3 = [i ** 2 for i in range(1, 10)]
print(list3)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]
2.列表的位置和切片,元素的次数
-
位置
items = ['Python', 'Java', 'Java', 'Go', 'Kotlin', 'Python'] # 查找元素的索引位置 print(items.index('Python')) # 0 # 从做开始找的第一个指定元素的位置 print(items.index('Python', 2)) # 5 # 从指定位置后开始找指定元素的位置 # 注意:虽然列表中有'Java',但是从索引为3这个位置开始后面是没有'Java'的 print(items.index('Java', 3)) # ValueError: 'Java' is not in list
-
切片
根据列表元素的位置进行切片
import random nums = [random.randrange(1, 100) for _ in range(9)] print(nums) # 从位置二开始取到最后一个位置 print(nums[2:]) # 输出全部元素 print(nums[::]) # 反转 print(nums[::-1]) # 从位置1取到位置2 print(nums[1:3]) # 从位置2取到位置7,步长为2 print(nums[2:7:2]) # 位置输入错误,超出范围,切片位置不能这样写 print(nums[10:15]) print(nums[5:1])
-
次数
计算出指定位置的元素的出现总次数:count()函数
items = ['banana', 'grape', 'apple','waxberry', 'pitaya', 'apple'] # count() ---> 统计元素在列表中出现的次数 print(items.count('apple')) print(items.count('strawberry'))
3.列表也支持拼接、重复、成员运算、索引和切片以及比较运算
-
拼接
list5 = [1, 3, 5, 7] list6 = [4, 4, 8] # 1 list5 += list6 print(list5) # 2 list5.extend(list6) print(list5)
-
重复
list4 = [1, 10, 100] * 5 print(list4)
-
比较
# 比较 ---> 实际工作中使用较少(可以忽略不计) list7 = list(range(1, 8, 2)) list8 = [0, 3, 5, 7, 9] # 比较两个列表的元素是否意义对应相等 print(list5 == list7)![在这里插入图片描述](https://img-blog.csdnimg.cn/cover1/248667912046641316.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,image_MjAyMDA3MTUxNjIxMDEzOC5wbmc=,size_16,color_FFFFFF,t_70,image/resize,m_lfit,w_962#pic_center) print(list7 != list8) # 比较两个列表对应元素的大小,不是比较len()的大小 print(list7 < list8) # False # True # False
-
添加和删除,清除
items = ['banana', 'grape', 'apple', 'waxberry', 'pitaya', 'apple'] # count() ---> 统计元素在列表中出现的次数 print(items.count('apple')) print(items.count('strawberry')) # 添加元素 items.append('blueberry') items.insert(1, 'watermelon') print(items) # 删除元素 # pop()函数删除指定位置的元素,并返回该值 items.pop() items.pop(4) # 删除指定位置的元素 del items[0] # 删除该元素,但正向删除会打乱元素的位置,一般()是元素本身 while 'apple' in items: items.remove('apple') print(items) # 清空列表元素 items.clear() print(items)
-
反转和排序
items = ['banana', 'grape', 'apple', 'waxberry', 'pitaya', 'apple'] # 反转 items.reverse() print(items) # 排序(可以修改reverse参数控制排升序或者排降序) items.sort() print(items)
-
随机抽取和乱序
names = ['喜羊羊', '美羊羊', '懒洋洋', '沸羊羊', '暖羊羊', '灰太狼', '小灰灰'] # sample函数可以对列表元素进行无放回抽样,抽五个 print(random.sample(names, k=5)) # choices函数可以对列表元素进行有放回抽样(可以重复抽中),抽五个 print(random.choices(names, k=5)) # choice函数可以从列表中随机选择一个元素 print(random.choice(names)) # shuffle函数可以实现列表元素的随机乱序 random.shuffle(names) print(names)
列表的生成式
1.用for循环的生成
# 1
nums = []
for x in range(1,10):
nums.append(x)
print(nums)
# 2
#对列表进行读写操作的for循环
for i in range(nums):
print(nums[i])
nums[i] = 100
print(nums)
# 对列表进行读操作
for x in nums:
print(x)
x= 100
print(nums)
# 3
# 创建一个由'hello world'中除空格和元音字母外的字符构成的列表
items2 = []
for x in 'hello world':
if x not in ' aeiou':
items2.append(x)
print(items2)
# 创建一个由个两个字符串中字符的笛卡尔积构成的列表
items3 = []
for x in 'ABC':
for y in '12':
items3.append(x + y)
print(items3)
2.通过生成式创建列表。
# 创建一个由1到9的数字构成的列表
items1 = [x for x in range(1, 10)]
print(items1)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 创建一个由'hello world'中除空格和元音字母外的字符构成的列表
items2 = [x for x in 'hello world' if x not in ' aeiou']
print(items2)
# ['h', 'l', 'l', 'w', 'r', 'l', 'd']
# 创建一个由个两个字符串中字符的笛卡尔积构成的列表
items3 = [x + y for x in 'ABC' for y in '12']
print(items3)
# ['A1', 'A2', 'B1', 'B2', 'C1', 'C2']
总结
以一个程序结尾:
有15个男人和15个女人坐船出海,船坏了,需要把其中15个人扔到海里,其他人才能活下来;
所有人围成一圈,由某个人从1开始依次报数,报到9的人被扔到海里,下一个人重新从1开始报数,
直到将15个人扔到海里。最后,15个女人都幸存了下来,15个男人都被扔到了海里。
问原先哪些位置是男人,哪些位置是女人
persons = [True] * 30
index, counter, number = 0, 0, 0
while counter < 15:
if persons[index]:
number += 1
if number == 9:
persons[index] = False
counter += 1
number = 0
index += 1
if index == 30:
index = 0
for person in persons:
# 三元条件运算 ---> if后面的表达式为True,取if前面的值,否则取else后面的值
# 相当于简写版(精简版)的if...else...结构
print('女' if person else '男', end='')