我想在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
。
答案 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