【发布时间】:2022-11-07 21:43:10
【问题描述】:
我有 2 个清单
l1 = [['a',1],['b',2],['c',3]]
l2 = [['b',2,10],['c',3,8]]
我希望使用 python 中的列表理解来复制以下代码:
for i in range(len(l1)):
cnt = 0
for j in range(len(l2)):
if (l1[i][0]==l2[j][0]) & (l1[i][1]==l2[j][1]):
cnt = 1
if cnt==1:
isintb.append(1)
else:
isintb.append(0)
预期输出:[0,1,1]
你们能帮忙吗?
我尝试如下:
[[1 if (l1[i][0]==l2[j][0]) & (l1[i][1]==l2[j][1]) else 0 for j in range(len(l2))] for i in range(len(l1))]
得到如下输出: [[0, 0], [1, 0], [0, 1]]
【问题讨论】:
-
您确定要通过使用列表推导来使您的代码更加模糊吗?通常,您要问的是糟糕的编码习惯。提示:如果很难实现列表理解,那就不要。
-
替换逻辑&和和使您的代码按预期工作
-
即使将 & 替换为 and 也不会使其工作,除非将条件放在循环内,并且每次迭代时将 cnt 设置回 0。
-
@SembeiNorimaki 实际上它确实可以使用这些数据,尽管这是一种荒谬的方法
-
如果您总是查看第二个列表的前两个元素,那么首先列出
l2中的前两个元素可能会更清楚。然后看起来像[1 if it in [l[:2] for l in l2] else 0 for it in l1]
标签: python list-comprehension nested-loops