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
While looping over the whole list, get the first index from each sublist like this:
which outputs:
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
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-each Loop:
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.
You just need to iterate over the
data
list properly to extract the state names. Currently, your loop is iterating over each element of thedata
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:
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: