How to Check If a List (Array) Contains a Value in Python

When you work with real-world data in Python, a very common task is to check whether a list (often informally called an “array”) contains a particular value. This comes up in data cleaning, searching logs, filtering API responses, and validating user input. In this hands‑on guide, you will learn multiple ways to check membership in Python lists, when each method is appropriate, and how to handle advanced scenarios like nested lists and custom conditions.

What does “contains a value” mean in Python?

In Python, “contains a value” usually means: “Is this value a member of this collection?” For lists, that is a membership test: does an element equal any item in the list, according to Python’s equality rules for that type?

Key points:

  • Lists are ordered, mutable collections: my_list = [1, 2, 3]
  • The membership operators in and not in ask “Is this element in this list?”
  • Membership is based on equality: x == item for some item in the list

In the examples below, you can mentally replace “list” with “array” if you come from languages like Java, C#, or JavaScript. In Python, lists are the normal way to represent arrays of mixed or dynamic data.

1. Use the in operator (the idiomatic way)

The most Pythonic way to check if a list contains a value is the in operator. It returns True if the value is present, otherwise False.

cities = ["New York", "Los Angeles", "Chicago", "Houston"]

if "Chicago" in cities:
print("Chicago is in the list of cities.")
else:
print("Chicago is not in the list of cities.")

Output:

Chicago is in the list of cities.

I executed the above example code and added the screenshot b

How to Check If a List (Array) Contains a Value in Python

Why this is recommended:

  • Readable: “if ‘Chicago’ in cities” reads almost like English.
  • Works for all iterable types (lists, tuples, sets, strings, etc.).
  • No need to write loops or extra conditions for simple membership checks.

Mini exercise

Try changing "Chicago" to "Boston" in the above code and see how the result changes. This is a quick way to verify your understanding.

2. Use the not in operator (check absence)

To check that a value does not appear in a list, use not in. This is more readable than negating an in expression.

states = ["California", "Texas", "Florida", "New York"]

if "Ohio" not in states:
print("Ohio is not in the list of states.")
else:
print("Ohio is in the list of states.")

Output:

Ohio is not in the list of states.

I executed the above example code and added the screenshot b

Check If a List (Array) Contains a Value in Python

Use this pattern when you want to guard against invalid values or skip certain items in validation code, API filters, and user‑input checks.

3. Use list.count() when you care about frequency

Sometimes you want to know not only whether a value exists, but how many times it appears. The list.count() method returns the number of occurrences.

fruits = ["apple", "banana", "orange", "apple", "grape"]

if fruits.count("apple") > 0:
print("The list contains apples.")
print("Number of apples:", fruits.count("apple"))
else:
print("The list does not contain apples.")

Possible output:

The list contains apples.
Number of apples: 2

When to use count():

  • You need both membership information and frequency.
  • The list is not extremely large, or you only call count() occasionally.

Important note: count() scans the entire list every time you call it. For very large lists or many repeated checks, this can be slower than other approaches.

4. Use list.index() when you need the position

If you need the index of the element in the list, you can use index(). If the element is not found, it raises a ValueError, so you typically handle it with try/except.

presidents = [
"George Washington",
"John Adams",
"Thomas Jefferson",
"James Madison"
]

try:
idx = presidents.index("Thomas Jefferson")
print("Thomas Jefferson is in the list at index:", idx)
except ValueError:
print("Thomas Jefferson is not in the list.")

Output:

Thomas Jefferson is in the list at index: 2

I executed the above example code and added the screenshot b

Check If a List Contains a Value in Python

Pitfall:

presidents.index("Abraham Lincoln")  # Raises ValueError

When to use index():

  • You definitely expect the value to be in the list and want its position.
  • Or you are comfortable handling the case where it is missing with try/except.

If you only care about existence (True/False), in is usually simpler and clearer than using index().

5. Use set for faster repeated membership checks

If you need to check membership many times against the same collection, converting the list to a set can significantly speed up lookups. Sets in Python use hash tables, making membership checks on average O(1).

cities = ["New York", "Los Angeles", "Chicago", "Houston", "Chicago"]
city_set = set(cities) # duplicate values are removed

print("Original list:", cities)
print("Set of cities:", city_set)

if "Boston" in city_set:
print("Boston is in the list of cities.")
else:
print("Boston is not in the list of cities.")

Example output:

Original list: ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Chicago']
Set of cities: {'Los Angeles', 'Chicago', 'Houston', 'New York'}
Boston is not in the list of cities.

When to use a set:

  • You have a large dataset and need many membership checks.
  • You do not care about the order of elements.
  • You do not need duplicate items.

Trade‑off: Converting to a set has an upfront cost (O(n)), but repeated lookups are far faster than scanning the list each time.

6. Use any() with conditions (flexible, expressive)

Sometimes you do not want to match a value exactly; instead, you want to know whether any element satisfies a condition (for example, greater than a threshold, matches a pattern, or contains a substring). The built‑in any() is ideal for this.

Example: any number greater than a threshold

numbers = [2, 4, 6, 8, 10]

if any(num > 7 for num in numbers):
print("The list contains a number greater than 7.")
else:
print("The list does not contain a number greater than 7.")

Output:

The list contains a number greater than 7.

Example: any string containing a substring

cities = ["New York", "Los Angeles", "Chicago", "Houston", "Phoenix"]

if any("Angeles" in city for city in cities):
print("There is a city containing 'Angeles'.")
else:
print("No city contains 'Angeles'.")

When to use any():

  • You need conditional membership (e.g., “any value matching this rule?”).
  • You want short‑circuit behavior (Python stops at the first match, which is efficient).

7. Use filter() to retrieve matching items

While any() answers “Does at least one match exist?”, filter() gives you back all elements that satisfy a condition. This is helpful when you need the actual values, not only a yes/no answer.

cities = ["New York", "Los Angeles", "Chicago", "Houston", "Phoenix"]

filtered_cities = list(filter(lambda city: "o" in city.lower(), cities))

if filtered_cities:
print("Cities containing 'o':", filtered_cities)
else:
print("No cities contain 'o'.")

Example output:

Cities containing 'o': ['New York', 'Los Angeles', 'Houston']

You can express the same idea more idiomatically with a list comprehension:

filtered_cities = [city for city in cities if "o" in city.lower()]

When to use filter() or a comprehension:

  • You want a new list of matching items.
  • You may use any(filtered_cities) or bool(filtered_cities) as a membership check, while still retaining the values.

8. Check membership in nested lists

Real datasets often contain nested structures: a list of lists, or a list of records. To check whether a value appears inside any sublist, you can combine any() with a loop over the outer list.

states_nested = [
["California", "Texas"],
["Florida", "New York"],
["Illinois", "Ohio"]
]

if any("Texas" in sublist for sublist in states_nested):
print("Texas is in the nested list of states.")
else:
print("Texas is not in the nested list of states.")

Output:

Texas is in the nested list of states.

Example: nested lists with numbers

numbers_nested = [
[1, 2, 3],
[4, 5],
[6, 7, 8]
]

target = 5

if any(target in sublist for sublist in numbers_nested):
print(f"{target} is present in the nested list.")
else:
print(f"{target} is not present in the nested list.")

This pattern generalizes well to more complex structures, such as lists of dictionaries or JSON responses.

Choose the right method (practical guidance)

Here is a quick, practical guide to help you choose the right approach:

  • Use value in my_list
    When you just need a simple True/False membership check.
  • Use value not in my_list
    When you want to assert that a value is missing, e.g., validation or guarding against duplicates.
  • Use my_list.count(value)
    When you also care about how many times the value appears, and your list is not extremely large.
  • Use my_list.index(value) inside try/except
    When you need the index of the value and can handle the case where it might be missing.
  • Use a set (value in my_set)
    When you have large datasets and many repeated membership checks, and you do not care about order or duplicates.
  • Use any(condition(item) for item in my_list)
    When you need conditional membership checks, such as “any number > 100?” or “any string that matches this pattern?”.
  • Use nested any() or comprehensions
    When working with nested lists or more complex data structures.

By thinking about your use case (simple membership, performance, frequency, position, or conditions), you can choose the method that keeps your code correct, readable, and efficient.

Common Issues and Best Practices

Here are some subtle issues developers (and AI summaries) often skip, but you should know about:

  • Confusing lists and strings
    value in my_string checks for a substring, not an item in a list. If you expect a list, make sure your data is actually a list before checking membership.
  • Using count() or repeated in checks in tight loops
    For large lists, repeated scans can hurt performance. Convert to a set if you are doing many lookups.
  • Ignoring case and whitespace
    For text data, “New York”, “new york”, and " New York " are different strings. Normalize using .strip() and .lower() before checking membership when you expect logical equivalence.
  • Relying on index() without handling ValueError
    Always wrap index() in try/except unless you are certain the element is present.
  • Forgetting about data types
    1 in [1, 2, 3] is not the same as "1" in [1, 2, 3]. Be careful when parsing input from files or APIs where numbers might come in as Python strings.

By keeping these in mind, you’ll avoid subtle bugs in data processing pipelines and production code.

Summary and next steps

You have learned multiple ways to check if a Python list (array) contains a value:

  • Simple membership with in and not in
  • Counting occurrences with count()
  • Finding positions with index()
  • Fast membership using set
  • Conditional membership with any() and filter()
  • Membership in nested lists with nested any() checks

Next, you can extend these ideas to other data structures such as tuples, sets, dictionaries (checking keys or values), and NumPy arrays or pandas Series for scientific computing and machine learning workflows.

You may also read:

51 Python Programs

51 PYTHON PROGRAMS PDF FREE

Download a FREE PDF (112 Pages) Containing 51 Useful Python Programs.

pyython developer roadmap

Aspiring to be a Python developer?

Download a FREE PDF on how to become a Python developer.

Let’s be friends

Be the first to know about sales and special discounts.