1

I'm a beginner with Python and wanted to make a script to collect some basketball stats from basketball-reference.com and sort the list based on a certain stat. I understand this error is thrown when you try to reference an index in a list where that index does not exist. But I've tried creating both a completely empty list and one with a defined range and I'm still getting that error.

CODE:

player_first_name = ["Luka", "Nikola", "Giannis", "Stephen", "Jayson"]
player_last_name = ["Doncic", "Jokic", "Antetokounmpo", "Curry", "Tatum"]
player = []

... some code not pertaining to this

for x in range(5):
    player[x] = player_first_name[x] + " " + player_last_name[x]

NOTE: I get this error if I declare player = [], player = list(), or player = [] * 5, according to what I've read online, all of these should have been fine. The only way I can get this error to go away is if I actually put values into each index (eg. player = ["a", "b", "c", "d", "e"]

As said before, I've tried declaring the player list as:

player = []
player = [] * 5
player = list()

All of these cases resulted in the error.

1
  • you mind sharing the url you are using. I can likely give you a more efficient way to pull the table than what I am assuming that you are doing. Commented Nov 20, 2022 at 9:39

2 Answers 2

1

player = [] is an empty list. If you want to assign values to this list you have to use append or any other method. This method will give you error:

for x in range(5):
    player[x] = player_first_name[x] + " " + player_last_name[x]

#IndexError: list assignment index out of range

You cannot simply do a for loop and assign value since it is an empty list. the correct way would be:

for x in range(5):
    player.append(player_first_name[x] + " " + player_last_name[x])
print(player)


#['Luka Doncic', 'Nikola Jokic', 'Giannis Antetokounmpo', 'Stephen Curry', 'Jayson Tatum', 'Luka Doncic', 'Nikola Jokic', 'Giannis Antetokounmpo', 'Stephen Curry', 'Jayson Tatum']
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you! I tried using .append at some point earlier but I think the way I did it was wrong. This fixed my issue.
1

Playing around with an online python interpreter a bit at https://replit.com/languages/python3 - you can do that locally, but it's convenient for quickly checking bits of syntax and learning exactly what they do.

Let's explore things one by one:

x = []
x[1]= 2
print(x[1])

results in:

Traceback (most recent call last):
  File "main.py", line 2, in <module>
    x[1]= 2
IndexError: list assignment index out of range

Which makes sense - we're trying to assign to an index that isn't there. list() will do the same. Checking the []*5 thing, we see:

print([]*5) outputs []

So that's the same thing.

print([1]*5) outputs in [1, 1, 1, 1, 1]

So it looks like multiplying a list by a number just repeats the list - repeating an empty list is just an empty list.

x = []
x.append(1)
print(x)

gives us what we want, though, so that's one approach. Personally I would get more complex and do something like:

x= list(map(lambda x : x * 2, range(5)))
print(x)

which results in:

[0,2,4,6,8]

for reasons I'll explain below. Here, the map function is taking an function that can be performed on items and a list, and a list, and resulting a list created by applying the function to each element of the list. For your case, that would look like

players = list(map(lambda x : layer_first_name[x] + " " + player_last_name[x], range(5))

The reason I would to that is that it is immutable - values do not change. It's not really important in this case, but that's a good habit to get into. There's an entire paradigm of programming built around that, as they're often easier to analyze (both for humans and machines.) I won't proselytize too much, but at minimum I will say it's good to use immutable constructions by default when it's convenient to do so.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.