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

时间:2018-12-11 07:23:35

标签: python-3.x function

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

但是,我无法执行此操作。我尝试使用while循环和for循环来遍历列表元素的索引,但无济于事。

我是Python的新手,对此将提供任何帮助。

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

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

2 个答案:

答案 0 :(得分:1)

另一种解决方案,它避免了索引并且更具Python风格:

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。

顺便说一句,它也更快:

%timeit bijection(2)
3.32 µs ± 37 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

4.11 µs ± 27.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

@Marmik上面给出的第一个解决方案

答案 1 :(得分:0)

您唯一的错误是您没有重置j的值。它不断增加,并且在到达一个点之后,它将永远不会进入第二个循环

用于循环解决方案

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

循环解决方案

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