Home > OS >  How to count number of 0 in a list of lists?
How to count number of 0 in a list of lists?

Time:09-18

I want calculate the number of time a 0 appears in a "list of lists" web scraped, it's like my list of lists is not a list because when I print, it's done that :

[3]
[1]
[3]
[3]
[1]
[1]
[0]
[0]
[1]
[1]

if it's really is a list of list it's should tell me this :

[[3],[1],[3],[3],[1],[1],[0],[0],[1],[1]]

So, list or not list I cant count the number of time the 0 is here, how can I do for count the 0 ?

In this exemple, there is two 0, so the result is = 2

There is my code, maybe you can tell me how I can, I tried count(0) and other method, but it's dont work

from bs4 import BeautifulSoup
import requests
from csv import writer

url= "https://blablablabla.htm"
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')

lists = soup.find_all('tr', class_="mat1")

with open('file.csv', 'w', encoding='utf8', newline='') as f:
    thewriter = writer(f)

for list in lists: 
        
        but = list.find('td', class_="tj1").text.replace('\xa0', '').replace(" ", "1")
        
        info = but[3:]

        infos = len(info)
        infoss = int(infos)
        print(infoss)

print(infoss) is :

3
1
3
3
1
1
0
0
1
1

and i need a code which tell me the number of 0 in this list, so here it's 2

CodePudding user response:

You are already iterating through the list of lists and printing out the values within it.

Can you think of a way to check the value instead of printing it and keep track of the number of times the value is equal to 0?

EDIT: Are you saying that this code doesn't work?

import requests
from csv import writer

url= "https://blablablabla.htm"
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')

lists = soup.find_all('tr', class_="mat1")

with open('file.csv', 'w', encoding='utf8', newline='') as f:
    thewriter = writer(f)

coun = 0
for list in lists: 
        
        but = list.find('td', class_="tj1").text.replace('\xa0', '').replace(" ", "1")
        
        info = but[3:]

        infos = len(info)
        infoss = int(infos)
        print(infoss)
        
        if infoss == 0 :
            coun = coun   1
        

print(coun)

CodePudding user response:

i tried this :

from bs4 import BeautifulSoup
import requests
from csv import writer

url= "https://blablablabla.htm"
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')

lists = soup.find_all('tr', class_="mat1")

with open('file.csv', 'w', encoding='utf8', newline='') as f:
    thewriter = writer(f)

for list in lists: 
        
        but = list.find('td', class_="tj1").text.replace('\xa0', '').replace(" ", "1")
        
        info = but[3:]

        infos = len(info)
        infoss = int(infos)
        print(infoss)
        
        coun = 0
        if infoss < 1 :
            coun = coun   1
        
        print(coun)

the result is this :

0
0
0
0
0
0
1
1
0
0

yes it's tell me 1 and 1, but i dont want that form of answer, i just want it's tell me result = 2, without all the rest

i tried to just have the number of item with a len, but it's seems to me, it's a bunch of list, but they are not in big list as they should to be. I cant track nothing, they seems not linked betwwen them in a big list.

I tried a dico method, and doesnt work too

CodePudding user response:

You could try creating new list to store value of infoss then count element infoss that has 0.

lst_infoss = []
for list in lists: 
    
    but = list.find('td', class_="tj1").text.replace('\xa0', '').replace(" ", "1")
    
    info = but[3:]

    infos = len(info)
    infoss = int(infos)
    print(infoss)
    # append infoss to new list (lst_infoss)
    lst_infoss.append(infoss)

print(lst_infoss)    
zero_infoss = lst_infoss.count(0)
print(zero_infoss)

CodePudding user response:

You were close to your goal and based on question title and your second example you could also use a list comprehension iterating your list and check the len() of result:

ls = [[3],[1],[3],[3],[1],[1],[0],[0],[1],[1]]
len([l for l in ls if l[0] == 0])
#output -> 2

Note: Avoid using python reserved terms (keywords), this could have unwanted effects on the results of your code.

  • Related