计算列表中某个子列表索引中值的实例,但每个列表只计算一次

时间:2017-08-21 21:59:02

标签: python python-3.x list loops

我的数据类似于:

[[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。

2 个答案:

答案 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的事实。