目标:迭代lst1和lst2,只显示lst_msk值等于1的值。lst_msk为0的索引处的lst1和lst2的所有值都应忽略
示例:
lst1 = [1,2,3,4,5]
lst2 = [1,2,3,4,5]
lst_msk = [1,1,1,0,0]
我的方法:
for i in lst1:
for j in lst2:
# couldn't figure out the remaining part yet
期望输出:
1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3
您可以将zip
用于该任务,如下所示:
lst1 = [1,2,3,4,5]
lst2 = [1,2,3,4,5]
lst_msk = [1,1,1,0,0]
for l1, l2, lm in zip(lst1,lst2,lst_msk):
if lm == 1:
print(l1,l2)
输出
1 1
2 2
3 3
当您需要处理相等长度的列表中的相应元素时,zip非常方便。
这里有一个简单的解决方案:
lst1 = [1,2,3,4,5]
lst2 = [1,2,3,4,5]
lst_msk = [1,1,1,0,0]
for index, item in enumerate(lst_msk):
if item == 1:
print(lst1[index], lst2[index])
您可以使用zip来迭代"平行的";列表:
for v1, v2, msk in zip(lst1, lst2, lst_mask):
..
(如果要同时迭代所有列表(或
for v1, msk1 in zip(lst1, lst_mask):
for v2, msk2 in zip(lst2, lst_mask):
...
(如果所有的CCD_ 2和CCD_。
不需要创建二次循环。这样的解决方案如您所愿:
lst1 = [1,2,3,4,5]
lst2 = [1,2,3,4,5]
lst_msk = [1,1,1,0,0]
for i in range(len(lst1)):
if lst_msk[i] == 1:
print(lst1[i], lst2[i])
输出:
1 1
2 2
3 3
您可以使用列表压缩和zip
。zip
返回i-(lst1(、j-(lst2(、k-(lst_msk(值,您可以使用if
进行过滤。但在这种情况下,您应该了解特定的zip
功能:
print(*[f"{i} {j}" for i,j,k in zip(lst1,lst2, lst_msk) if k != 0], sep="n")
输出:
1 1
2 2
3 3