Pyton 获取两个 list 的差集、并集

本文介绍了四种不同的方法来找出一个列表相对于另一个列表的差集,并展示了如何求两个列表的并集和交集。通过Python代码实现,包括使用循环和集合操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

求差:
  1. method one:
    list_one = [1, 2, 3]
    listd_two = [2, 3]
    diff = []
    for  x in list_one:
        if x not in list_two:
            diff.append(x)

  2. method two:
    diff = [x for x in list_one if x not in list_two]

  3. method three:
    diff = list(set(list_one)^set(list_two))

  4. method four:
    diff = list(set(list_one).difference(set(list_two))) one中有而two中没有的

求和:
tt = list(set(list_one).union(set(list_two)))

求交:
for x in list_one:
    if x in list_two:
        jj.append(x)

<think>好的,用户想用Python获取Microsoft Outlook的长效OAuth令牌。首先,我需要回忆一下OAuth 2.0的流程,特别是微软的认证流程。微软现在主要使用OAuth 2.0,尤其是授权码流程,可能需要用到PKCE扩展。 用户提到了长效令牌,这可能涉及到刷新令牌的使用。因为访问令牌通常有效期较短,而刷新令牌可以用来获取新的访问令牌,从而实现长效访问。所以关键是如何正确获取刷新令牌妥善保存。 接下来,我需要查看用户提供的引用内容。引用[3]提到Outlook不支持账号密码,改用OAuth2.0认证,且重定向地址配置为微软的特定URL。这可能意味着用户需要注册应用,配置正确的重定向URI。另外,引用[2]中的Python-OAuth2项目可能已经不再维护,所以可能需要使用其他库,比如requests-oauthlib或者msal(Microsoft Authentication Library)。 接下来,步骤应该是: 1. 在Azure门户注册应用,获取客户端ID和客户端密钥。 2. 配置API权限,比如添加Microsoft Graph的Mail.Read等权限。 3. 使用授权码流程获取授权码,然后交换访问令牌和刷新令牌。 4. 使用刷新令牌来获取新的访问令牌,避免频繁重新认证。 需要注意的是,微软的令牌有效期可能根据策略有所不同,但正确使用刷新令牌可以延长访问时间。示例代码部分需要使用支持OAuth2.0的库,比如msal,因为它是微软官方推荐的库,处理令牌刷新也更方便。 可能的问题点包括正确处理令牌的存储和刷新,处理重定向URI的配置,以及确保权限的正确申请。此外,用户可能需要管理员同意某些权限,尤其是组织内的应用。 现在需要将这些步骤整理成清晰的指导,提供示例代码。同时,确保代码符合微软当前的认证要求,比如使用适当的端点(v2.0)和正确的范围参数。另外,要提醒用户保存刷新令牌,在访问令牌过期时使用它来获取新的令牌,从而实现长效访问。</think>### 使用Python获取Microsoft Outlook长效OAuth令牌的方法 #### 1. 注册Azure应用配置权限 - 在[Azure门户](https://portal.azure.com)注册应用,获取`client_id`和`client_secret` - 添加`https://login.microsoftonline.com/common/oauth2/nativeclient`为重定向URI[^3] - 为应用配置API权限:`Mail.Read`, `offline_access`(获取刷新令牌的关键权限) #### 2. 安装依赖库 推荐使用`msal`库(Microsoft身份验证库): ```bash pip install msal ``` #### 3. 实现OAuth2授权流程 ```python import msal client_id = "你的应用ID" client_secret = "你的客户端密钥" authority = "https://login.microsoftonline.com/common" scopes = ["https://graph.microsoft.com/Mail.Read"] app = msal.ConfidentialClientApplication( client_id, authority=authority, client_credential=client_secret ) # 获取授权URL auth_url = app.get_authorization_request_url(scopes, redirect_uri="https://login.microsoftonline.com/common/oauth2/nativeclient") print(f"请访问此URL授权: {auth_url}") # 输入回调后获取的授权码 auth_code = input("输入返回的授权码: ") # 获取令牌 result = app.acquire_token_by_authorization_code(auth_code, scopes, redirect_uri="https://login.microsoftonline.com/common/oauth2/nativeclient") if "access_token" in result: print("访问令牌:", result["access_token"]) print("刷新令牌:", result.get("refresh_token")) # 保存此令牌用于长效访问 else: print("认证失败:", result.get("error_description")) ``` #### 4. 使用刷新令牌获取新访问令牌 ```python refresh_token = "之前保存的刷新令牌" result = app.acquire_token_by_refresh_token(refresh_token, scopes) if "access_token" in result: new_access_token = result["access_token"] new_refresh_token = result.get("refresh_token") # 可能需要更新保存新刷新令牌 ``` #### 关键要点 1. `offline_access`权限是获取刷新令牌的必要条件 2. 刷新令牌有效期通常为90天,但需要定期更新[^3] 3. 令牌应安全存储(推荐使用加密存储) 4. 访问Microsoft Graph API时使用`https://graph.microsoft.com/v1.0/me/messages`等终结点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值