Esta es una pregunta bastante antigua, pero ofrezco esta respuesta porque las respuestas anteriores no hacen frente a elementos en la lista que no son cadenas (o algún tipo de objeto iterable). Dichos elementos causarían que toda la comprensión de la lista falle con una excepción.
Para tratar con gracia dichos elementos en la lista omitiendo los elementos no iterables, utilice lo siguiente:
[el for el in lst if isinstance(el, collections.Iterable) and (st in el)]
entonces, con tal lista:
lst = [None, 'abc-123', 'def-456', 'ghi-789', 'abc-456', 123]
st = 'abc'
aún obtendrá los elementos coincidentes ( ['abc-123', 'abc-456']
)
La prueba de iterable puede no ser la mejor. Lo tengo desde aquí: en Python, ¿cómo puedo determinar si un objeto es iterable?