Securely testing the presence of an item in a list without exposing the list
You could use convergent encryption for this.


For each item to be inserted, compute its hash, then encrypt it by deriving a key from that hash. Insert the ciphertext (discarding the hash/key).
To test for the presence of an item, hash it, encrypt, look for matching ciphertext.


You would likely want to use something like a hash table or a search tree (dictionary or set), instead of a flat list, to avoid $O(n)$ scan when looking for an item.

Note that the user can brute force / dictionary attack the scheme by encrypting chosen items and checking them against the list.