day8-字典和集合作业

  1. 已知一个数字列表,统计偶数的个数

    [10, 34, 5, 65, 66, 89, 82]

    结果: 4

    list1 = [10, 34, 5, 65, 66, 89, 82]
    list2 = [x for x in list1 if x % 2 == 0]
    print('偶数的个数:', len(list2))
    
  2. 已知一个数字列表,计算所有元素的平均值

    [23, 34, 56, 9, 80]

    list1 = [23, 34, 56, 9, 80]
    result = sum(list1)/len(list1)
    print('所有元素的平均值:', result)
    
  3. 已知一个列表,统计列表中整数的个数

    [‘abc’, True, 12.5, 20, ‘hello’, 10]

    结果:2

    list1 = ['abc', True, 12.5, 20, 'hello', 10]
    list2 = [x for x in list1 if type(x) == int]
    print('列表中整数的个数:', len(list2))
    
  4. 已知一个列表,统计列表中非整数的个数

    [‘abc’, True, 12.5, 20, ‘hello’, 10]

    结果:4

    list1 = ['abc', True, 12.5, 20, 'hello', 10]
    list2 = [x for x in list1 if type(x) != int]
    print('列表中非整数的个数:', len(list2))
    
  5. 已知一个列表,计算列表中所有数字的和

    [‘abc’, True, 12.5, 20, ‘hello’, 10]

    结果:

    list1 = ['abc', True, 12.5, 20, 'hello', 10]
    list2 = [x for x in list1 if type(x) == int or type(x) == float]
    print('列表中所有数字的和:', sum(list2))
    
  6. 已知一个列表,计算所有大于100的数的和

    [‘abc’, 23, 101, 12,5, ‘hello’, 120.8]

    结果:221.8

    list1 = ['abc', 23, 101, 12,5, 'hello', 120.8]
    list2 = [x for x in list1 if (type(x) == int or type(x) == float) and x > 100]
    print('大于100的数的和:', sum(list2))
    
  7. 已知一个列表,提取列表中所有字符串元素的最后一个字符。

    [‘hello’, ‘how’, 10, ‘are’, 12.5, True]

    结果: [‘0’, ‘w’, ‘e’]

    list1 = ['hello', 'how', 10, 'are', 12.5, True]
    list2 = [x[-1] for x in list1 if type(x) == str]
    print(list2)
    
  8. 根据要求完成以下功能:

    已知变量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}
    ]
    
    1. (数据清洗)删除orders中支付金额大于订单金额的订单
    # 方法1:提取有效数据,产生一个新列表
    orders1 = [x for x in orders if float(x['orderAmount']) >= float(x['payment'])]
    orders = order1
    # 方法2:
    for order in orders[:]:
    # 获取支付金额和订单金额转换成浮点数
    	payment = float(order['payment'])
    	orderAmount = float(order['orderAmount'])
    	# 删除支付金额 > 订单金额
    	if payment > orderAmount:
    		orders.remove(order)
    		continue
    		# 修改没有删除的金额类型
    		order['payment'] = payment
    		order['orderAmount'] = orderAmount
    
    1. 计算这个店家的总订单金额和总支付金额以及实际销售额(店家真正拿到手中钱)
    total_order_amount = [float(x['orderAmount']) for x in orders]
    total_payment_amount = [float(x['payment']) for x in orders]
    actual_sales = [float(x['payment']) for x in orders if x['chargeback'] == False]
    print('这个店家的总订单金额:', sum(total_order_amount))
    print('这个店家的总支付金额:', sum(total_payment_amount))
    print('这个店家的实际销售额:', sum(actual_sales))
    
    1. 统计这个店家的订单的订单来源渠道的数量
    chanel = [x['chanelID'] for x in orders]
    set_chanel = set(chanel)
    print('这个店家的订单的订单来源渠道的数量:', len(set_chanel))
    
    1. 计算订单退货率
    chargeback_num = [float(x['payment']) for x in orders if x['chargeback'] == True]
    return_rate = len(chargeback_num)/len(orders)*100
    print('订单退货率为{}%'.format(return_rate))
    
    1. 获取最优广告渠道
    chanel = [x['chanelID'] for x in orders]
    count = 0
    optimal_advertising_channel = chanel[0]
    for x in chanel:
        count1 = chanel.count(x)
        if count1 > count:
            count = count1
            optimal_advertising_channel = x
    print('最优广告渠道:', optimal_advertising_channel)
    
    1. 将订单渠道为None的订单的渠道值修改成最优广告渠道
    for x in orders:
        if x['chanelID'] == None:
            x['chanelID'] = optimal_advertising_channel    # # optimal_advertising_channel上一题已获得
    print(orders)
    
    1. 在每个订单数据中添加一个键值对保存订单的折扣值
    for x in orders:
        x.setdefault('discount', float(x['payment'])/float(x['orderAmount']))
    print(orders)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值