01-homework
1.已知一个数字列表,求列表中心元素。例如:[1,2,3] -> 2;[1,2,3,4] -> 2,3
numList = [1, 2, 3]
numList = [1, 2, 3, 4]
length = len(numList)
if length % 2 == 0:
left = length // 2 - 1
right = length // 2
print(numList[left], numList[right])
else:
print(numList[length // 2])
2.不使用sum方法,已知一个数字列表,求所有元素的和。
numSum = 0
numList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in numList:
numSum += i
print(numSum)
print(sum(numList))
3.已知一个数字列表,输出所有奇数下标对应的元素。
numList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(len(numList)):
if i % 2 != 0:
print(numList[i])
4.已知一个数字列表,在原列表基础上将所有元素乘二。
例如:nums = [1, 2, 3, 4] —> nums = [2, 4, 6, 8]
nums = [1, 2, 3, 4]
for i in range(len(nums)):
# nums[i] = nums[i] * 2
nums[i] *= 2
print(nums)
5.有两个列表A和B,使用列表C来获取两个列表中公共的元素。
例如: A = [1, ‘a’, 4, 90] B = [‘a’, 8, ‘j’, 1] --> C = [1, ‘a’]
A = [1, 'a', 4, 90]
B = ['a', 8, 'j', 1]
C = []
for i in A:
for j in B:
if i == j:
C.append(i)
print(C)
6.有一个数字列表,获取这个列表中的最大值.
(注意: 不能使用max函数)。
例如: nums = [19, 89, 90, 600, 1] —> 600
nums = [19, 89, 90, 600, 1]
max_ = nums[0]
for i in nums:
if i > max_:
max_ = i
print(max_)
7.用一个列表来保存一个节目的所有分数,求平均分数(去掉一个最高分,去掉一个最低分,求最后得分) ,
score = [10,20,50,70,99,80,45,30]
score = [10, 20, 50, 70, 99, 80, 45, 30]
max_ = score[0]
min_ = score[0]
for i in score:
if i > max_:
max_ = i
# elif i < min_:
# min_ = i
if i < min_:
min_ = i
score.remove(max_)
score.remove(min_)
print(round(sum(score) / len(score), 1))
8.数字组合:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
numCount = 0
for i in range(1, 5):
for j in range(1, 5):
for x in range(1, 5):
if i != j and i != x and j != x:
print(i * 100 + j * 10 + x)
numCount += 1
print(f'一共有{numCount}个')
9.如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。请找出1000以内所有的阿姆斯特朗数:
例如:1 ^ 1 = 1、2 ^ 1 = 2、1 ^ 3 + 5 ^3 + 3 ^3 = 153等。
for i in range(1, 1001):
iCopy = i
iCopy_1 = i
length = 1
while iCopy // 10 != 0:
iCopy //= 10
length += 1
numSum = 0
while True:
numSum += (i % 10) ** length
i //= 10
if i == 0:
break
if numSum == iCopy_1:
print(f'{iCopy_1}是阿姆斯特朗数')
02-review
1.循环:break、continue
2.for-else语句:当所有的情况考虑完才能下某个结论时使用for-else语句。
注意:
for循环正常结束时,else语句执行;for循环非正常结束时else语句不执行。
3.列表:列表的性质:列表是可变的,列表是有序的。列表中元素可以是任意数据类型,并且是可以重复的。
4.拼接、重复
5.循环(直接遍历、间接遍历)
6.列表的增删改(append、insert、extend;del、remove、pop、clear)
03-列表相关方法
numlist = [12, 13, 14, 15, 16, 90]
1.sum:计算数字列表中所有元素的和
print(sum(numlist))
2.max\min:求数字列表中最大或最小值
numlist = [12, 13, 14, 15, 16, 90]
print(max(numlist))
print(min(numlist))
3.count:统计某个元素在列表中出现的次数
numlist = [12, 13, 14, 15, 16, 90]
print(numlist.count(1))
4.sort:默认将列表从小到大排序,直接修改列表本身,sort返回值为空值
numList1 = [10, 30, 0, 100, 5, -100]
print('sort', numList1.sort())
print('sort', numList1)
5.sorted:默认将列表从小到大排序,sorted不修改列表本身,返回排好序的列表结果
numList1 = [10, 30, 0, 100, 5, -100]
print('sorted', sorted(numList1))
print('sorted', numList1)
5.reverse:将列表倒序输出,直接修改列表本身,返回值是None
numList1 = [10, 30, 0, 100, 5, -100]
print('reverse', numList1.reverse())
print('reverse', numList1)
6.切片将列表倒序
numList1 = [10, 30, 0, 100, 5, -100]
print(numList1[::-1])
7.index:查找某个元素出现的位置,从左向右找,找到此元素第一次出现的位置后直接停止查找
list1 = ['abcd', 1, 2, 3, 4, 1]
print(list1.index(1))
8.index还可以直接执行从哪个位置开始查找
list1 = ['abcd', 1, 2, 3, 4, 1]
print(list1.index(1, list1.index(1) + 1))
思考:如果从list1中查找第二个1出现的位置?
1.先查找第一个1的位置
numIndex = list1.index(1)
2.将没有第一个1的列表切出来
list2 = list1[numIndex + 1:]
3.找新列表中的第一个1(相当于原列表中的第二个1),再将去掉的部分长度补回来
print(list2.index(1) + len(list1[:numIndex + 1]))
练习:
1.获取列表中出现次数最多的元素。
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3],打印[3];nums = [1,2,2,1,3],打印[1,2]
#nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
nums = [1, 2, 2, 1, 3]
#numCount判断次数
numCount = 0
#list1存放出现次数最大的元素
list1 = []
#对所有元素遍历
for i in nums:
# 判断此元素的最大次数是不是大于原来的最大次数
# if分支判断列表中单一元素出现次数最大
if nums.count(i) > numCount:
# 条件成立重新给numCount赋值
numCount = nums.count(i)
# 清空列表再添加元素
list1.clear()
list1.append(i)
# elif分支判断多个元素同时出现次数最大
elif nums.count(i) == numCount:
# 将所有情况考虑完在判断本元素是否添加过
for x in list1:
if i == x:
break
else:
list1.append(i)
print(list1)
04-列表补充
1.成员运算:in、not in
判断某个元素在不在容器中
list1 = [1, 2, 3, 'abc', [1, 2, 3]]
print(1 in list1)
print([3] not in list1)
练习1:
获取列表中出现次数最多的元素。
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3],打印[3];nums = [1,2,2,1,3],打印[1,2]
#nums = [1, 2, 3, 1, 4, 2, 1, 3, 7, 3, 3]
nums = [1, 2, 2, 1, 3]
#numCount判断次数
numCount = 0
#list1存放出现次数最大的元素
list1 = []
#对所有元素遍历
for i in nums:
# 判断此元素的最大次数是不是大于原来的最大次数
# if分支判断列表中单一元素出现次数最大
if nums.count(i) > numCount:
# 条件成立重新给numCount赋值
numCount = nums.count(i)
# 清空列表再添加元素
list1.clear()
list1.append(i)
# elif分支判断多个元素同时出现次数最大
elif nums.count(i) == numCount and i not in list1:
list1.append(i)
print(list1)
1.列表的比较大小
有序容器比较大小要求:
a.两个容器的数据类型保持一致。
b.比较的是第一对不相同元素的大小,并且这两个元素的数据类型要一致
c.两个有序容器找不到第一对不相同元素,谁长谁大
list2 = [1, 2, 4, [1, 2, 4]]
list3 = [1, 2, 4, [1, 2, 3]]
print(list3 > list2)
练习2:
print([3] > [1, 2, 3]) # True
print([123] > [213]) # False
print([3] > [3, 2, 1]) # False
05-如何删除列表中重复元素
举例:
name_list = [‘张三’, ‘李四’, ‘王五’, ‘李四’, ‘王五’, ‘王五’, ‘张三’],要求结果:[‘张三’,‘李四’,‘王五’]
count = 0
for i in name_list:
count += 1
if name_list.count(i) > 1:
# print(f'{i}是重复的')
name_list.remove(i)
print(name_list)
print(count)
结果是[‘李四’, ‘李四’, ‘王五’, ‘张三’],for循环只执行了4次
1.间接删除
name_list = ['张三', '李四', '王五', '李四', '王五', '王五', '张三']
names = []
for i in name_list:
if i not in names:
names.append(i)
print(names)
2.控制下标
name_list = ['张三', '李四', '王五', '李四', '王五', '王五', '张三']
index_ = 0
while index_ < len(name_list):
if name_list.count(name_list[index_]) > 1:
del name_list[index_]
else:
index_ += 1
print(name_list)
3.倒着删除
name_list = ['张三', '李四', '王五', '李四', '王五', '王五', '张三']
for i in range(len(name_list) - 1, -1, -1):
if name_list.count(name_list[i]) > 1:
del name_list[i]
print(name_list)
06-列表推导式
1.作用:在创建列表时同时向列表中添加元素。
2.意义:
(1).简化代码,提高代码的可读性。
(2).在某些场景下可以使用列表推导式代替append。
三、性能比较:列表推导式性能 > append
四、列表推导式的三种语法
语法一:[表达式 for 变量 in 容器]
注意:
表达式就是向列表中添加的元素
numList = []
for i in range(1, 101):
numList.append(i)
print(numList)
列表推导式
numList_2 = [i for i in range(1, 101)]
print(numList_2)
语法二:[表达式 for 变量 in 容器 if 条件]
注意:
for循环执行一次,如果条件成立,表达式的结果添加到列表中
numList3 = [i for i in range(0, 101) if i % 5 == 0]
print(numList3)
语法三:[表达式 for 变量1 in 容器1 for 变量2 in 容器2]
注意:
第一个for循环执行1次,第二个for循环执行N次,第二个for循环每执行一次,表达式的结果就向列表中添加一次。
list1 = [f'{index} * {column} = {index * column}' for index in range(1, 10) for column in range(1, index + 1)]
print(list1)