Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python index error value not in list...on .index(value)

I am a beginner at Python, and to those who holds negative thoughts against my post, please leave. I am simply seeking help here and trying to learn. I'm trying to check within a simple data set the 0s and 1s. This will be used towards defining voids and solids on floor plans to define zones in buildings... eventually 0s and 1s will be swapped out with coordinates.

I am getting this error: ValueError: [0, 3] is not in list

I am simply checking if one list is contained in the other.

currentPosition's value is  [0, 3]
subset, [[0, 3], [0, 4], [0, 5], [1, 3], [1, 4], [1, 5], [2, 1], [3, 1], [3, 4], [3, 5], [3, 6], [3, 7]]

Here's the code snippet:

def addRelationship(locale, subset):
    subset = []; subSetCount = 0
    for rowCount in range(0, len(locale)):
        for columnCount in range (0, int(len(locale[rowCount])-1)):
            height = len(locale)
            width = int(len(locale[rowCount]))
            currentPosition = [rowCount, columnCount]
            currentVal = locale[rowCount][columnCount]
            print "Current position is:" , currentPosition, "=", currentVal

            if (currentVal==0 and subset.index(currentPosition)):
                subset.append([rowCount,columnCount])
                posToCheck = [rowCount, columnCount]
                print "*********************************************Val 0 detected, sending coordinate to check : ", posToCheck

                newPosForward = checkForward(posToCheck)
                newPosBackward = checkBackward(posToCheck)
                newPosUp = checkUpRow(posToCheck)
                newPosDown = checkDwnRow(posToCheck)

I am using subset.index(currentPosition) to check and see if [0,3] is in subset but getting the [0,3] is not in list. How come?

like image 444
FongYu Avatar asked Aug 23 '12 17:08

FongYu


People also ask

What does index return if not in list?

index() method raises a 'ValueError' if specified item is not found in the list.

What does index return if not in list Python?

The method index() returns the lowest index in the list where the element searched for appears. If any element which is not present is searched, it returns a ValueError.

How do you fix index errors in Python?

The Python IndexError: list index out of range can be fixed by making sure any elements accessed in a list are within the index range of the list. This can be done by using the range() function along with the len() function.

How do I fix error index out of range?

To fix this, you can modify the parameter in the range() function. A better solution is to use the length of the list as the range() function's parameter. The code above runs without any error because the len() function returns 3. Using that with range(3) returns 0, 1, 2 which matches the number of items in a list.


2 Answers

Let's show some equivalent code that throws the same error.

a = [[1,2],[3,4]]
b = [[2,3],[4,5]]

# Works correctly, returns 0
a.index([1,2])

# Throws error because list does not contain it
b.index([1,2])

If all you need to know is whether something is contained in a list, use the keyword in like this.

if [1,2] in a:
    pass

Alternatively, if you need the exact position but don't know if the list contains it, you can catch the error so your program does not crash.

index = None

try:
    index = b.index([0,3])
except ValueError:
    print("List does not contain value")
like image 126
danmcardle Avatar answered Sep 20 '22 11:09

danmcardle


subset.index(currentPosition) evaluates False when currentPosition is at index 0 of subset, so your if condition fails in that case. What you want is probably:

...
if currentVal == 0 and currentPosition in subset:
...
like image 45
Silas Ray Avatar answered Sep 21 '22 11:09

Silas Ray