我的数据类似于:
[[1, 1, 4]], [[1, 2, 4], [1, 7, 4]], [[2, 2, 4]]
我正在这样迭代:
count = 0
for list in lists:
for sublist in list:
if sublist[2] == 4:
count += 1
print(count)
输出总是最终为4。
我想遍历所有3个子列表列表,计算“4”在子列表的第三个索引中的时间。但是,在第二个列表中,我只想要计算一次,而不是两次。所以返回的值应该是3,而不是4。
答案 0 :(得分:1)
如果您在第三个位置找到一个sublist
的{{1}},则可以通过突破最里面的循环来简单地修复它。这基本上会检查是否有4
满足您的条件:
sublist
我还将变量名称count = 0
for lst in lists:
for sublist in lst:
if sublist[2] == 4:
count += 1
break # just added that line
print(count)
# 3
替换为list
,因为否则会影响内置名称list
。
这也可以写成:
lst
如果您想检查所有>>> sum(any(sublist[2] == 4 for sublist in lst) for lst in lists)
3
是否符合条件,请将sublist
替换为any
:
all
答案 1 :(得分:0)
def has4(lol):
for lst in lol:
if lst[2] == 4:
return True
return False
lists = [[1, 1, 4]], [[1, 2, 4], [1, 7, 4]], [[2, 2, 4]]
count = sum(map(has4, lists))
首先,我们定义一个谓词,该匹配项返回True。然后我们使用map()
将输入转换为匹配/不匹配的布尔序列。然后我们总结,利用True计为1和False为0的事实。