首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个嵌套列表之间的双射函数(Python)

两个嵌套列表之间的双射函数(Python)
EN

Stack Overflow用户
提问于 2018-12-11 07:23:34
回答 2查看 1K关注 0票数 0

我想在Python中定义一个函数,以便在两个嵌套列表之间建立一个双射。这两个列表是ab,我想将a[i][j]映射到b[i][j]

然而,我无法做到这一点。我尝试使用while循环和for循环来迭代列表元素的索引,但都没有效果。

我是Python新手,所以如果能在这方面提供任何帮助,我们将不胜感激。

这是我尝试过的代码。我有以下两个列表,lastcoldatafirstcoldata (下面提供),我想在它们之间做上面提到的双射。

代码语言:javascript
复制
lastcoldata=[[4], [0, 5, 6], [3], [], [], [], [], [], [], [], [], [], [], [], [1, 2], [], [], [], [], [], [], [], [], [], [], [], []]

firstcoldata=[[0], [1, 2, 3], [4], [], [], [], [], [], [], [], [], [], [], [], [5, 6], [], [], [], [], [], [], [], [], [], [], [], []]

def bijection(num):
    i=0;j=0
    while i<27:
        while j<len(lastcoldata[i]):
            if num==lastcoldata[i][j]:
                return firstcoldata[i][j]
            j=j+1
        i=i+1

例如,我尝试调用bijection(lastcoldata[1][0]),但是没有输出,而预期的输出是1。它分别用于bijection(lastcoldata[1][1])bijection(lastcoldata[1][2]),分别给出了23输出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-11 08:03:30

您唯一的错误是没有重置j的值。它继续递增,在一个点之后,它将永远不会进入第二个循环。

循环解

代码语言:javascript
复制
def bijection(num) :
    for i in range(len(lastcoldata)) :
        for j in range(len(lastcoldata[i])) :
            if num == lastcoldata[i][j] :
                return firstcoldata[i][j]
    return None

同时循环解

代码语言:javascript
复制
def bijection(num):
    i=0;
    while i < 27:
        j=0;
        while j < len(lastcoldata[i]):
            if num == lastcoldata[i][j]:
                return firstcoldata[i][j]
            j=j+1
        i=i+1
票数 0
EN

Stack Overflow用户

发布于 2018-12-11 08:27:49

另一种解决方案是避免索引,而且更像pythonic:

代码语言:javascript
复制
def bijection(num):
    for li, fi in zip(lastcoldata, firstcoldata):
        for lj, fj in zip(li, fi):
            if lj == num:
                return fj
    return None

如果找不到参数,则返回None。

顺便说一句,它也更快:

代码语言:javascript
复制
%timeit bijection(2)
3.32 µs ± 37 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

对比

代码语言:javascript
复制
4.11 µs ± 27.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

@Marmik给出的第一个解

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53719239

复制
相关文章

相似问题

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