skip to Main Content

I am new to programming and am having trouble figuring out how to loop over a list within a list using Python.

I am working with output from the U.S. Census API that is formatted as follows:

[['NAME', 'POP_2020', 'POP_2021', 'state'],
 ['Oklahoma', '3962031', '3986639', '40'],
 ['Nebraska', '1961455', '1963692', '31'],
 ['Hawaii', '1451911', '1441553', '15'],
 ['South Dakota', '887099', '895376', '46'],
 ['Tennessee', '6920119', '6975218', '47']]

I would like to write a function that will extract the state name from each of the individual lists.

Here is my code:

    import requests

    url = f'https://api.census.gov/data/2021/pep/populationget=NAME,POP_2020,POP_2021&for=state:*'
    response = requests.get(url)
    data = response.json()

    def statenames():
        for i in data:
            print(data[0])

The function above returns the following output, which isn’t what I’m looking for:

['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']
['NAME', 'POP_2020', 'POP_2021', 'state']

I’ve been able to get the individual state names be writing a series of print statements like this:

print(data[0][0])
print(data[1][0])
print(data[2][0])

I know that isn’t very efficient and am hoping there is a way to use a for loop instead.

Thanks in advance for your help!

4

Answers


  1. While looping over the whole list, get the first index from each sublist like this:

    list = [['NAME', 'POP_2020', 'POP_2021', 'state'],
     ['Oklahoma', '3962031', '3986639', '40'],
     ['Nebraska', '1961455', '1963692', '31'],
     ['Hawaii', '1451911', '1441553', '15'],
     ['South Dakota', '887099', '895376', '46'],
     ['Tennessee', '6920119', '6975218', '47']]
    
    for sublist in list:
        print(sublist[0]) # get the first item from the list
    

    which outputs:

    NAME
    Oklahoma
    Nebraska
    Hawaii
    South Dakota
    Tennessee
    
    Login or Signup to reply.
  2. Your for loop inside statenames was only print first item in your list.
    If you want to get first item of sublist inside your list. You can do this solution

    list = [['NAME', 'POP_2020', 'POP_2021', 'state'],
    ['Oklahoma', '3962031', '3986639', '40'],
    ['Nebraska', '1961455', '1963692', '31'],
    ['Hawaii', '1451911', '1441553', '15'],
    ['South Dakota', '887099', '895376', '46'],
    ['Tennessee', '6920119', '6975218', '47']]
    
    #Solution 1
    for sublist in list:
        print(sublist[0]) # Get the first item from the list
    
    #Solution 2
    for i in range(len(list)):
        print(list[i][0]) # Get the first item from the list
    
    
    # Output will like this:
    # NAME
    # Oklahoma
    # Nebraska
    # Hawaii
    # South Dakota
    # Tennessee
    
    Login or Signup to reply.
  3. Python provides you 2 ways of iterating over data through loop. You can use the normal indexed for loop or you can do it through a for-each loop.
    Whichever method you want to choose, you will require a nested loop to iterate over your list. The outer loop will run for all items in your outer list, i.e., it will return the lists, as your code has been doing. The inner loop will help you iterate through a single item in that list.

    Index method :

    for i in range(len(data)):
        for j in range(len(data[i])):
            print(data[i][j],end=' ')
        print()
    

    For-each Loop:

    for item in data:
        for value in item:
            print(value,end=' ')
        print()
    

    Both these codes will give the same output, so you can choose either as required. The indexed loop will be beneficial in cases where you might need to modify data based on its position. Otherwise if you only wish to go through the data, you can use for-each loop as it will reduce the risk of accidentally modifying data.

    Login or Signup to reply.
  4. You just need to iterate over the data list properly to extract the state names. Currently, your loop is iterating over each element of the data list, but you want to skip the first element (header row) and extract the first element of each subsequent list.

    Here’s how you can achieve it with a for loop:

    import requests
    
    url = f'https://api.census.gov/data/2021/pep/population?get=NAME,POP_2020,POP_2021&for=state:*'
    response = requests.get(url)
    data = response.json()
    
    def statenames():
        for i in range(1, len(data)):
            state_name = data[i][0]
            print(state_name)
    
    statenames()
    

    In the code above, the loop starts from index 1 (range(1, len(data))) instead of 0, so it skips the header row. For each iteration, it extracts the state name from the first element (data[i][0]) of each list and prints it.

    This will produce the following output:

    Oklahoma
    Nebraska
    Hawaii
    South Dakota
    Tennessee
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search