-
已知一个数字列表,统计偶数的个数
[10, 34, 5, 65, 66, 89, 82]
结果: 4
nums = [10, 34, 5, 65, 66, 89, 82] count = 0 for num in nums: if num % 2 == 0: count += 1 print('偶数的个数是:', count)
-
已知一个数字列表,计算所有元素的平均值
[23, 34, 56, 9, 80]
nums = [23, 34, 56, 9, 80] print('平均值为:', sum(nums)/len(nums))
-
已知一个列表,统计列表中整数的个数
[‘abc’, True, 12.5, 20, ‘hello’, 10]
结果:2
list1 = ['abc', True, 12.5, 20, 'hello', 10] count = 0 for i in list1: if type(i) == int: count += 1 print('整数的个数是:', count)
-
已知一个列表,统计列表中非整数的个数
[‘abc’, True, 12.5, 20, ‘hello’, 10]
结果:4
list1 = ['abc', True, 12.5, 20, 'hello', 10] count = 0 for i in list1: if type(i) != int: count += 1 print('非整数的个数是:', count)
-
已知一个列表,计算列表中所有数字的和
[‘abc’, True, 12.5, 20, ‘hello’, 10]
结果:
list1 = ['abc', True, 12.5, 20, 'hello', 10] sum1 = 0 for i in list1: if type(i) in (int, float): sum1 += i print('数字和是:', sum1)
-
已知一个列表,计算所有大于100的数的和
[‘abc’, 23, 101, 12,5, ‘hello’, 120.8]
结果:221.8
list1 = ['abc', 23, 101, 12, 5, 'hello', 120.8] sum1 = 0 for i in list1: if type(i) in (int, float) and i > 100: sum1 += i print('大于100的数字之和是:', sum1)
-
已知一个列表,提取列表中所有字符串元素的最后一个字符。
[‘hello’, ‘how’, 10, ‘are’, 12.5, True]
结果: [‘0’, ‘w’, ‘e’]
list1 = ['hello', 'how', 10, 'are', 12.5, True] list2 = [str1[-1] for str1 in list1 if type(str1) == str] print(list2)
-
根据要求完成以下功能:
已知变量orders中保存一个店家的所有订单数据,每个订单包含:订单ID、用户ID、订单金额、支付金额、订单来源渠道、是否退货
orders = [ {'orderID': '254118088', 'userID': '157213', 'goodsID': 'PR000064', 'orderAmount': '272.51', 'payment': '272.51 ', 'chanelID': None, 'chargeback': False}, {'orderID': '263312190', 'userID': '191121', 'goodsID': 'PR000583', 'orderAmount': '337.93', 'payment': '337.93 ', 'chanelID': '渠道-0765', 'chargeback': True}, {'orderID': '188208169', 'userID': '211918', 'goodsID': 'PR000082', 'orderAmount': '905.68', 'payment': '891.23 ', 'chanelID': '渠道-0530', 'chargeback': False}, {'orderID': '203314910', 'userID': '201322', 'goodsID': 'PR000302', 'orderAmount': '786.27', 'payment': '688.88 ', 'chanelID': None, 'chargeback': False}, {'orderID': '283989279', 'userID': '120872', 'goodsID': 'PR000290', 'orderAmount': '550.77', 'payment': '542.51 ', 'chanelID': '渠道-9527', 'chargeback': False}, {'orderID': '279103297', 'userID': '146548', 'goodsID': 'PR000564', 'orderAmount': '425.2', 'payment': '425.20 ', 'chanelID': '渠道-0765', 'chargeback': False}, {'orderID': '316686066', 'userID': '148994', 'goodsID': 'PR000709', 'orderAmount': '1764.37', 'payment': '1707.04 ', 'chanelID': '渠道-0396', 'chargeback': False}, {'orderID': '306447069', 'userID': '104863', 'goodsID': 'PR000499', 'orderAmount': '499.41', 'payment': '480.42 ', 'chanelID': '渠道-0007', 'chargeback': False}, {'orderID': '290267674', 'userID': '206155', 'goodsID': 'PR000253', 'orderAmount': '1103', 'payment': '1050.95 ', 'chanelID': '渠道-0330', 'chargeback': False}, {'orderID': '337079027', 'userID': '211918', 'goodsID': 'PR000768', 'orderAmount': '465.41', 'payment': '465.41 ', 'chanelID': '渠道-9527', 'chargeback': False}, {'orderID': '417411381', 'userID': '148994', 'goodsID': 'PR000483', 'orderAmount': '279.53', 'payment': '279.53 ', 'chanelID': '渠道-0007', 'chargeback': False}, {'orderID': '254286596', 'userID': '174586', 'goodsID': 'PR000322', 'orderAmount': '622.7', 'payment': '622.70 ', 'chanelID': '渠道-0283', 'chargeback': False}, {'orderID': '303647260', 'userID': '178023', 'goodsID': 'PR000685', 'orderAmount': '969.61', 'payment': '913.58 ', 'chanelID': '渠道-0765', 'chargeback': False}, {'orderID': '347419495', 'userID': '209896', 'goodsID': 'PR000483', 'orderAmount': '279.18', 'payment': '225.15 ', 'chanelID': '渠道-0396', 'chargeback': False}, {'orderID': '384544993', 'userID': '148994', 'goodsID': 'PR000004', 'orderAmount': '3424.78', 'payment': '3424.78 ', 'chanelID': '渠道-0530', 'chargeback': False}, {'orderID': '322802617', 'userID': '125220', 'goodsID': 'PR000812', 'orderAmount': '430.69', 'payment': '4223.48 ', 'chanelID': '渠道-0530', 'chargeback': False}, {'orderID': '399101394', 'userID': '183645', 'goodsID': 'PR000025', 'orderAmount': '703.39', 'payment': '553.37 ', 'chanelID': '渠道-9527', 'chargeback': False}, {'orderID': '274413321', 'userID': '162256', 'goodsID': 'PR000813', 'orderAmount': '227.42', 'payment': '200.37 ', 'chanelID': '渠道-0530', 'chargeback': False}, {'orderID': '362677803', 'userID': '217238', 'goodsID': 'PR000400', 'orderAmount': '169.04', 'payment': '106.99 ', 'chanelID': '渠道-0789', 'chargeback': True} ]
-
(数据清洗)删除orders中支付金额大于订单金额的订单
i = 0 while i < len(orders): if float(orders[i]['payment']) > float(orders[i]['orderAmount']): orders.remove(orders[i]) continue i += 1 print(orders)
-
计算这个店家的总订单金额和总支付金额以及实际销售额(店家真正拿到手中钱)
sum1 = sum2 = sum3 = 0 for order in orders: sum1 += float(order['orderAmount']) sum2 += float(order['payment']) if not order['chargeback']: sum3 += float(order['payment']) print('总订单金额:', sum1) print('总销售金额:', sum2) print('实际销售额:', sum3)
-
统计这个店家的订单的订单来源渠道的数量
set1 = set() for order in orders: if order['chanelID'] != None: set1.add(order['chanelID']) print('订单来源的渠道数量总共有:', len(set1))
-
计算订单退货率
count = 0 for order in orders: if order['chargeback'] == True: count += 1 print('订单退货率是:%.2f' % (count/len(orders)))
-
获取最优广告渠道
chanels = list(set([order['chanelID'] for order in orders if order['chanelID']])) max_count = [] best = [] for chanel in chanels: count = 0 for order in orders: if order['chanelID'] == chanel: count += 1 max_count.append(count) max1 = max(max_count) for index in range(len(max_count)): if max_count[index] == max1: best.append(chanels[index]) print('最优渠道是:', best)
-
将订单渠道为None的订单的渠道值修改成最优广告渠道
chanels = list(set([order['chanelID'] for order in orders if order['chanelID']])) max_count = [] best = [] for chanel in chanels: count = 0 for order in orders: if order['chanelID'] == chanel: count += 1 max_count.append(count) max1 = max(max_count) for index in range(len(max_count)): if max_count[index] == max1: best.append(chanels[index]) print('最优渠道是:', best) for order in orders: for y_chanelID in best: if order['chanelID'] == None: order['chanelID'] = y_chanelID print(orders)
-
在每个订单数据中添加一个键值对保存订单的折扣值
for order in orders: order1 = float(order['orderAmount']) order2 = float(order['payment']) count_1 = str(order2 / order1) order.setdefault('discount', count_1) print(orders)
-
python语言基础之字典补充和集合
1、字典相关操作和方法
1)字典不支持+、* 和比较大小
2)字典支持: ==、!=
print({'a':20,'b':10} == {'b':10, 'a':20}) - True(字典无序)
3)in 和 not in
键 in 字典 - 判断字典是否存在指定的键
d1 = {'a': 10, 'b': 20, 'c': 30}
print(30 in d1) - False
4)dict
dict(数据) - 将数据转换成字典
数据的要求:
1)数据本身是一个序列
2)序列中的元素必须是长度为2的小序列(一个用来提供键,一个用来提供值)
3)小序列的第一个元素必须是不可变的
注意:将字典转换成列表或者元组的时候,将字典的键作为列表、元组中的元素
5)相关方法
1》字典.clear() ------ 清空字典
2》字典.copy() ------ 可以理解为克隆了一个和原字典一模一样的字典
3》字典.items() ------ 将字典中的元素转换成一个由键值对组成的元组,返回一个新的序列
之后可以对获取的新的序列进行遍历等后续操作
{键1:值1,键2:值2....} ----->[(键1,值1),(键2,值2)....]
4》字典.keys() ------- 获取字典当中所有的键,返回一个新的键的序列
5》字典.values() ------ 获取字典当中所有的值,返回一个新的序列
6》字典.setdefault(键,值) ------ 在字典中添加一个键值对,不存在则添加,已经存在则不添加
7》字典.update(序列) ---- 将序列中的元素全部添加到字典中,其中序列是字典或者是能够转换成字典的序列
字典推导式:1){键值对 for 变量 in 序列} 2){键值对 for 变量 in 序列 if 条件语句}
2、集合
1)什么是集合
集合是容器型数据类型(序列);将{}作为容器的标志,里边有多个元素,它们之间用逗号隔开:{元素1,元素2,元素3........}
集合是可变的并且集合是无序的
元素 - 必须是不可变的数据;并且是唯一的
1》空集合 - s1 = set()
2》集合元素必须是不可变的数据
3》集合无序
4》集合元素唯一
2)集合的增删改查
1)查 -- 利用遍历查看
2)增 -- 集合.add(元素) -- 一个一个添加
集合.update(序列) - 批量添加
3)删 -- 集合.remove(元素) - 但是如果元素不存在则会报错
集合.discard(元素) - 如果元素不存在不会报错
3)集合运算
1》并集 - |
集合1 | 集合2 - 将两个集合合并成一个集合
2》交集 - &
集合1 & 集合2 - 获取两个集合的公共部分,产生一个新的集合
3》差集 - -
集合1 - 集合2 - 获取集合1中去掉包含在集合2中的元素之后剩下的元素
4》对称差集 - ^
集合1 ^ 集合2 - 将两个集合合并,去掉公共部分获取剩下的部分
5》判断子集关系
子集: >=, <=
真子集: >, <
集合1 > 集合2 - 判断集合2是否是集合1的真子集
集合1 < 集合2 - 判断集合1是否是集合2的真子集
print({100, 200, 300} > {100, 300}) - True
练习
用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
math = {‘小敏’, ‘小张’, ‘小李’}
Chinese = {‘小张’, ‘张筱’, ‘小王’, ‘小包’}
English = {‘小张’, ‘张筱’, ‘小栗子’}
1、求选课学生总共有多少人
set1 = math|Chinese|English
print(len(set1))
2、求只选了第一个学科的人的数量和对应的名字
set2 = math - Chinese - English
print(len(set2), set2)
3、求只选了一门学科的学生的数量和对应的名字
s3 = (Chinese - math - English)|(English - Chinese - math)|set2
print(len(s3), s3)
4、求选了三门学生的学生的数量和对应的名字
s4 = math&Chinese&English
print(len(s4), s4)
5、求只选了两门学科的学生的数量和对应的名字
s5 = set1 -s3 - s4
print(len(s5),s5)