首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在给定两个列表A和B的情况下创建len(A)的二进制列表C的快速方法

在给定两个列表A和B的情况下创建len(A)的二进制列表C的快速方法
EN

Stack Overflow用户
提问于 2021-03-02 14:55:42
回答 2查看 43关注 0票数 0

我有两个

非常大

列表

..。我想生成一个新的列表

长度的

它的所有位置都有1

在哪里

是在

,否则为0。在Python中执行此操作的计算效率最高的方法是什么?换句话说,有没有比下面更有效的方法?

代码语言:javascript
运行
复制
C = []
for x in A:
    if x in B:
        C.append(1)
    else:
        C.append(0)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-02 15:15:34

为了提高性能,您应该使

A

对象。

进行恒定时间的成员资格测试。这将从多项式时间O提高整个算法的效率

*

M)到线性时间,O(N):

代码语言:javascript
运行
复制
c = []
B = set(B)
for x in A:
    if x in B:
        C.append(1)
    else:
        C.append(0)
票数 3
EN

Stack Overflow用户

发布于 2021-03-02 14:58:52

您可以使用列表理解,但请记住,与循环方法相比,它在效率方面并没有提供很大的改进:

代码语言:javascript
运行
复制
[1 if x in B else 0 for x in A]

更新:最快的方法是从B准备一个地图并使用它进行搜索。

代码语言:javascript
运行
复制
B_map = {elt: True for elt in B}
C = [1 if B_map.get(x, False) else 0 for x in A]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66434635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档