Entonces, estoy ejecutando un código donde quiero encontrar 'a' o 'b'

Esto devuelve -1:

string = 'b'
i = string.find('a' or 'b')
print(i)

Esto también devuelve -1:

string = 'b'
i = string.find('a') or string.find('b')
print(i)

¿Cuál es la forma correcta de escribirlo?

0
El-bigode 22 feb. 2018 a las 22:59

4 respuestas

La mejor respuesta

string.find() devuelve -1 si no se encuentra una cadena, por lo que tendrías que probar explícitamente eso :

string.find('a') > -1 or string.find('b') > -1

Sin embargo, esto solo le indicará si la cadena está presente , no el índice. También puedes usar in:

'a' in string or 'b' in string

Si necesita encontrar la posición , es mejor que almacene primero el primer resultado en una variable:

a_pos = string.find('a')
pos = a_pos if a_pos > -1 else string.find('b')

Ahora pos es -1 (no se encontró ninguna subcadena) o la posición de la subcadena que se encontró (entonces 'a' si está presente, de lo contrario 'b'). Tenga en cuenta que luego conoce una posición, pero no la subcadena que encontró. Probablemente no sea tan útil tampoco .

3
Martijn Pieters 22 feb. 2018 a las 20:04

Este fragmento de código devolverá True si a o b están en su cadena

any(letter in string for letter in ('a','b'))

También es fácilmente extensible si desea agregar más que solo aob

1
Raw Dawg 22 feb. 2018 a las 20:16

Tienes que hacerlo en dos pasos:

string = 'b'
i = string.find('a')
if i < 0:
    i = string.find('b')
print(i)
2
Daniel 22 feb. 2018 a las 20:03

En tal caso, una expresión regular podría ser una solución, aunque para el caso simple que proporcione no sería la más rápida:

import re
m = re.search(r'a|b', string)
print(m and m.start())
1
trincot 22 feb. 2018 a las 20:04