我想在Python中定义一个函数,以便在两个嵌套列表之间建立一个双射。这两个列表是a和b,我想将a[i][j]映射到b[i][j]。
然而,我无法做到这一点。我尝试使用while循环和for循环来迭代列表元素的索引,但都没有效果。
我是Python新手,所以如果能在这方面提供任何帮助,我们将不胜感激。
这是我尝试过的代码。我有以下两个列表,lastcoldata和firstcoldata (下面提供),我想在它们之间做上面提到的双射。
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]),分别给出了2和3输出。
发布于 2018-12-11 08:03:30
您唯一的错误是没有重置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发布于 2018-12-11 08:27:49
另一种解决方案是避免索引,而且更像pythonic:
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给出的第一个解
https://stackoverflow.com/questions/53719239
复制相似问题