【数据分析面试】44.分析零售客户群体(Python 集合Set的用法)

news2024/9/21 22:39:45

在这里插入图片描述

题目

假设你是一家在线零售商的数据库管理员,需要分析两类客户的数据。一个集合 purchased_customers 包含在最近一次促销活动中购买了商品的客户ID,另一个集合 newsletter_subscribers 包含订阅了新闻通讯的客户ID。编写一个函数 analyze_customers,返回一个包含以下内容的字典:

  • 既购买了商品又订阅了新闻通讯的客户ID集合
  • 只购买了商品但没有订阅新闻通讯的客户ID集合
  • 只订阅了新闻通讯但没有购买商品的客户ID集合
  • 购买商品和订阅新闻通讯的所有唯一客户ID集合

示例:

输入:

purchased_customers = {1001, 1002, 1003, 1004}
newsletter_subscribers = {1003, 1004, 1005, 1006}

输出:

def analyze_customers(purchased_customers, newsletter_subscribers) 
-> 
{
    'both': {1003, 1004},
    'only_purchased': {1001, 1002},
    'only_subscribed': {1005, 1006},
    'all_customers': {1001, 1002, 1003, 1004, 1005, 1006}
}

答案

解题思路

考虑使用python中关于集合的操作。注意题目要求生成一个字典,想想字典和集合有什么不同。

答案代码

def analyze_customers(purchased_customers, newsletter_subscribers):
    return {
        "both": purchased_customers & newsletter_subscribers,
        "only_purchased": purchased_customers - newsletter_subscribers,
        "only_subscribed": newsletter_subscribers - purchased_customers,
        "all_customers": purchased_customers | newsletter_subscribers
    }


purchased_customers = {1001, 1002, 1003, 1004}
newsletter_subscribers = {1003, 1004, 1005, 1006}
result = analyze_customers(purchased_customers, newsletter_subscribers)
print(result)

集合(Set)的用法

集合(Set)用于存储多个不重复的元素。集合是无序的,并且元素不能重复。集合支持各种数学集合操作,如并集、交集和差集。

  1. 创建集合:使用花括号 {}或者 set()函数 。注意,空集合只能使用 set() 创建,因为 {} 被用来创建空字典。
  2. 集合的操作
    • 添加元素 使用 add() 方法
    • 移除元素:使用 remove()discard() 方法移除元素。区别是 remove() 在元素不存在时会引发 KeyError,而 discard() 不会
fruits = {"apple", "banana"}

# 添加元素
fruits.add("cherry")
print(fruits)  # 输出: {'apple', 'banana', 'cherry'}

# 移除元素
fruits.remove("banana")
print(fruits)  # 输出: {'apple', 'cherry'}

fruits.discard("banana")  # 不引发错误
  1. 集合的运算
    • 并集:使用 union() 方法或 | 运算符
    • 交集:使用 intersection() 方法或 & 运算符
    • 差集:使用 difference() 方法或 - 运算符
    • 对称差集:使用 symmetric_difference() 方法或 ^ 运算符。(对称差集是所有属于一个集合但不属于另一个集合的元素。)
A = {1, 2, 3}
B = {3, 4, 5}

# 并集
print(A.union(B))  # 输出: {1, 2, 3, 4, 5}
print(A | B)       # 输出: {1, 2, 3, 4, 5}

# 交集
print(A.intersection(B))  # 输出: {3}
print(A & B)              # 输出: {3}

# 差集
print(A.difference(B))  # 输出: {1, 2}
print(A - B)            # 输出: {1, 2}

# 对称差集
print(A.symmetric_difference(B))  # 输出: {1, 2, 4, 5}
print(A ^ B)                      # 输出: {1, 2, 4, 5}

更多详细答案可关注公众号查阅。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024一站式解决 python打包代码,发布到pypi

2024一站式解决 python打包代码,发布到pypi 文章目录 2024一站式解决 python打包代码,发布到pypi一、前言二、pypi账户注册与配置2.1 账户注册2.2 双因素认证2.3 API token生成 三、代码打包3.1 准备代码3.2 编写setup.py文件3.3 LICENSE3.3.1 常见的开源…

生信人写程序1. Perl语言模板及配置

生物信息领域常用语言 个人认为:是否能熟悉使用Shell(项目流程搭建)R(数据统计与可视化)Perl/Python/Java…(胶水语言,数据格式转换,软件间衔接)三门语言是一位合格生物信息工程师的标准。 生物信息常用语言非常广泛,我常用的有…

IT行业的现状和未来发展趋势:技术创新、市场需求、人才培养、政策法规和社会影响

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

SOLIDWORKS 2024云服务新功能

一、简单的分享一下,在线观看,轻松标记 在达索系统SOLIDWORKS 2024云服务中,您只需在达索系统SOLIDWORKS中点击按钮,就可以将当前的设计分享给其他人,无论是客户、供应商还是团队内部成员。共享的用户只要打开浏览器里…

volatile能保证原子性吗?为什么?

一、问题解析 volatile通常被比喻成”轻量级的synchronized“,也是Java并发编程中比较重要的一个关键字。和synchronized不同,volatile是一个变量修饰符,只能用来修饰变量。无法修饰方法及代码块等。 volatile的用法比较简单,只需…

intel三年来首次大更新竟然倒吸牙膏,线程数砍掉25%!

每年科技圈最热闹的几个话题,无非是几大科技公司发布新的产品,那这其中必然有核心巨头 intel 的身影。 据外媒 Benchlife 披露,英特尔计划在其 Arrow Lake-S 架构 Core Ultra 200 台式机 CPU 系列中推出共计 21 款 CPU。 这是 intel 首次在桌…

【嵌入式大赛应用赛道】机械手臂

电机 进步电机:它的转动是以确定的步数进行的,只要计算好脉冲数量和频率,就可以准确预测和控制电机的转动角度、速度以及停止的位置 伺服电机:将输入的电信号(如电压或电流指令)转换成轴上的精确旋转运动…

突发!超60篇被标记!Elsevier旗下顶刊,“On Hold”长达10个月!再次沦陷“新”风波!

【欧亚科睿学术】 近日,中科院老牌TOP期刊Chemosphere对超过60篇论文发布了关注声明,原因是正在调查可能存在的编辑利益冲突、作者身份异常以及同行评审和引用操纵问题。 图片来源:期刊官网 2024年4月11日,该期刊在线发布的一份…

WT99C262-SG LoRa开发板使用教程

WT99C262-SG模块是全新一代的Wi-FiBLELoRa无线扩频模块,基于启明云端WTLRC262-SG系列模组设计开发的新一代LoRa扩频芯片方案设计的无线串口模块。具有多种传输方式,LoRa扩频技术,且模组大部分管脚均已引出至两侧排针,开发人员可根…

msvcp140_codecvt_ids.dll找不到要如何处理?简单的修复方法分享

在使用Windows操作系统时,用户可能会遇到“无法找到msvcp140_codecvt_ids.dll”这一错误信息。该提示通常发生在启动某些应用程序时,提示失去了关键的动态链接库文件(DLL)依赖。此DLL文件属于Microsoft Visual C Redistributable软…

二进制搭建k8s

实验环境: k8s集群master01:192.168.1.11 k8s集群master02:192.168.1.22 master虚拟ip:192.168.1.100 k8s集群node01:192.168.1.33 k8s集群node01:192.168.1.44 nginxkeepalive01(master):192.168.1.55 nginxkeepalive02&a…

纯血鸿蒙APP实战开发——Navigation页面跳转对象传递案例

介绍 本示例主要介绍在使用Navigation实现页面跳转时,如何在跳转页面得到转入页面传的类对象的方法。实现过程中使用了第三方插件class-transformer,传递对象经过该插件的plainToClass方法转换后可以直接调用对象的方法, 效果图预览 使用说…

CIBERSORTx网页版报错

解决方式:bulk RNA-seq不能包含NA值

大白话!大模型(LLMs)私有化的三种方式:Prompts、Embeddings、Fine-tuning

私有化大模型的三种方式 随着我们使用大模型的深入呢,我们会发现这样一个现象,我们正常情况下问大模型的问题,会得到一个非常普适的回答,就是大模型会根据自己的训练的这个过往的一些知识的积累,然后告诉我们他认为最…

海外盲盒系统开发,开拓全球盲盒市场

盲盒作为经久不衰的行业,市场发展空间不断扩大。近几年,盲盒出海成为了我国盲盒发展的新赛道,各个盲盒企业更是纷纷摩拳擦掌,开拓海外市场,我国盲盒正在全世界范围内实现多元化发展。此外,我国是世界上有名…

光伏行业该如何起步?

随着全球对可再生能源的需求日益增长,光伏行业作为其中的佼佼者,正迎来前所未有的发展机遇。然而,对于新进入者或希望在这一领域有所建树的企业来说,如何起步并稳健发展是一个值得深思的问题。以下是一些关于光伏行业起步的建议。…

AniPortrait详细讲解以及完整搭建流程(有问题留言)

AniPortrait是一款真实感人像动画的音频驱动合成的AI程序。 下面是它的github源码: GitHub - Zejun-Yang/AniPortrait: AniPortrait: Audio-Driven Synthesis of Photorealistic Portrait AnimationAniPortrait: Audio-Driven Synthesis of Photorealistic Portrait Animati…

[Vs2019报错找不到服务实例的解决方案]

计算机疑难杂症记录与分享004 Vs2019报错找不到服务实例的解决方案1、问题现象1.1、问题一:打开vs2019打开项目工程文件,直接弹窗报错1.2、问题二:能打开工程了。识别项目文件不兼容问题。 2、问题原因3、问题一的解决3.1、方法一(亲测无效)3…

Java的response返回Json格式

问题 今天开发过程中,写了个拦截器,对于所以请求进行一个token的工作,对于不合标准的token返回错误,在网上找了个拦截器进行二次开发。 package com.maizhiyu.yzt.handle;import org.springframework.beans.factory.annotation.…