-2

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
  • Can you please provide what you want? Commented Jul 30, 2023 at 3:53
  • 1
    You almost got it -- in the first code sample, you want print(i[0]) instead of print(data[0]). (The way you had it, the loop variable i was not used, which is usually a sign that you did something wrong.) Commented Jul 30, 2023 at 3:56
  • The hint should be: where the code says for i in data:, the i is there for a reason, right? Is it a part of the syntax, or are you allowed to change it? If you research or check your notes, you can find that you can change it, and what its purpose is. After that, it should appear suspicious that the rest of the code doesn't use it yet. That's the problem: it should be doing so. If you understand what is in i each time through the loop, then it is obvious what to do next. Commented Jul 30, 2023 at 5:31
  • As an aside, "sublists" aren't anything special in Python and there is not really anything separate that needs to be taught about them. In Python, a list is a thing designed to have other things in it; it just happens in some cases that those other things are also lists. Commented Jul 30, 2023 at 5:40

3 Answers 3

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
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you very much! I knew it must be something easy. The beginner classes I've been taking haven't covered sublists yet, so this was very helpful.
0

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

Comments

0

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.