How to Solve Python TypeError: ‘float’ object is not subscriptable
Indexing syntax in Python does not allow you to access values within a floating-point number. Indexing syntax is not suitable for subscriptable objects like strings or lists. Floating-point values are...
Indexing syntax in Python does not allow you to access values within a floating-point number. Indexing syntax is not suitable for subscriptable objects like strings or lists. Floating-point values are single values. If you try to retrieve an individual number using a floating-point number, you'll get the "TypeError" message: "float' object isn't subscriptable em>
This tutorial will explain what an error is and how to fix it. We'll look at some examples and offer solutions.
TypeError: The 'float' object cannot be subscriptable
Let's look at the error message in detail to see what it means. TypeError is triggered when you try to use an illegal operation on a particular data type. The error is related to an illegal operation that involves floating-point numbers.
The "is not subscriptable” part means that we can't access any element of the
Float
object.
A specific value cannot be retrieved from a
Float
. Floating-point numbers cannot be subscriptable.
There are several possible causes for "TypeError":
- You are trying to get an item from a floating object.
- Multiple items are being replaced in a single list.
Subscriptable objects are containers for other objects, and implements them.
__getitem__()
method. Strings, lists, tuples and dictionaries are all examples of subscriptable objects.
It is possible to check if the object implements the.
__getitem__()
Method by listing its attributes using the
dir
function. Let's call this the dir function. Pass a float or string to see their attributes.
num = 5.1
print(dir(num))
['__abs__', '__add__', '__bool__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getformat__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__int__', '__le__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__pos__', '__pow__', '__radd__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rmod__', '__rmul__', '__round__', '__rpow__', '__rsub__', '__rtruediv__', '__set_format__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real']
string = "Python".
print(dir(string))
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
You can use the following to determine if an attribute is associated with an object:
In
operator.
num = 5.1
print('__getitem__' in dir(num))
False
That is what we can see.
__getitem__
Is Not An attribute of the Float data types.
string = "Python".
print('__getitem__' in dir(string))
True
That is what we can see.
__getitem__
This attribute is part of the String data type.
Example 1: Accessing an item from a floating tray
This error can occur when you use the indexing operation for float numbers such as extracting first or last digits from a floating point number. Let's take an example:
# floating point number
float_number = 456.0
# Use indexing to access the first digit of the floating numbers
first_digit = float_number[0]
# Print output
print(first_digit)
Let's see what happens when we run the code:
---------------------------------------------------------------------------
TypeError Traceback (most recently called last)
first_digit = float_number[0]
TypeError: The 'float' object cannot be subscriptable
The TypeError is raised by the Python interpreter because we are trying access an element in floating-point numbers.
Solution
To solve the problem, we need to convert the floating-point number into a subscriptable one. The following code will be used to typecast the floating point number to a string.
str()
function. Indexing allows us to access the first digit of a string once we have it. Next, we can use the int() function to convert the string's first digit into an integer.
# floating point number
float_number = 456.0
# Convert floating to string
string_number = str(float_number)
# Use indexing to access the first digit
first_digit = string_number[0]
# Convert the first digit string value into an integer
first_digit = int(first_digit)
# Print the first digit of console
print(f) The first digit of the float_number number is: first_digit.
Let's run this code to see the results.
The 4th digit is 456.0.
Example 2: Replacing multiple items in a list
Slicing is the process of specifying a list or items that you wish to modify or access in an object. List slicing can be used to replace multiple items on a list. Let's take an example program that changes the weight of apples in grams to one particular weight. The program's first section asks for input from the user to determine the default weight of an Apple.
Weight = input ("Enter the default apple weight: "
Then, we can create a list of apples weights that we want to change
apples = [96.3, 103.5, 74.5, 84.0, 90.2]
Indexing can be used to modify the list's values.
apples[0][1][2][3][4] = [float(weight)]*5
print(apples)
The code above resets the weights for all the apples in the index positions of the list to the value
Weight
Floating-point number. The weight is enclosed within square brackets, and multiplied with five. This operation assigns five values for each of the five index positions.
Apples
list.
Let's take a look at what happens when the program is run:
Enter the default weight of an apple: 80
---------------------------------------------------------------------------
TypeError Traceback (most recently called last)
apples[0][1][2][3][4] = [float(weight)]*5
TypeError: The 'float' object cannot be subscriptable
Because the Python interpreter only supports floats, it raises TypeError. We access the first element in the list by using
apples[0]
we get a
Float
. It is obvious that
apples[0][1]
Accessing the element at index position is the same as accessing it.
1
In a
Float
.
Solution
To fix this problem, we can use the slicing syntax.
Weight = input ("Enter the default apple weight: "
apples = [96.3, 103.5, 74.5, 84.0, 90.2]
apples[:4] = [float(weight)]*5
print(apples)
Enter the default weight of an apple: 80
[80.0, 80.0, 80.0, 80.0, 80.0]
The code retrieves all items from index position 0-4 and assigns each value to the input value.
Weight
. Visit the " How to get a substring from a string in Python To learn more about slicing, visit the "post" section.
Summary
Thank you for reading this tutorial. When you attempt to access floating-point numbers like a list, the error TypeError: "float" object is not subscriptable" will occur. This error can be fixed by using indexing or slicing syntax only on subscriptable objects, such as a string or list. You should use slicing to modify multiple values in a list instead of specifying a number of index numbers.