J'ai une chaîne qui commence par un numéro (de 0 à 9). Je sais que je peux "ou" 10 cas de test en utilisant startswith() mais il y a probablement une solution plus propre.
donc au lieu d'écrire
if (string.startswith('0') || string.startswith('2') ||
string.startswith('3') || string.startswith('4') ||
string.startswith('5') || string.startswith('6') ||
string.startswith('7') || string.startswith('8') ||
string.startswith('9')):
#do something
Existe-t-il une méthode plus intelligente ou plus efficace ?
1 votes
Si la question est posée : "Est-ce trop répétitif ?", il y a de fortes chances - dans un langage de haut niveau - que la réponse soit "Oui, c'est sûr". Soyez paresseux !
51 votes
Vous avez manqué
string.startswith('1')
.2 votes
@Illusionist Telle qu'elle est écrite, votre question signifie que vous voulez détecter les chaînes qui commencent par UN seul chiffre. Si c'est le cas, la seule bonne réponse parmi celles qui suivent, n'est pas celle qui utilise
s[0]
os[:1]
mais la solution de John Machin :if s.startswith(tuple('0123456789'))
. De plus, cette solution soulève une erreur lorsqu'il arrive que s est une séquence comme un tuple ou une liste, dont les cas produisent le même résultat que si c'était une chaîne de caractères. - Une autre solution est une regex dont le motif est ' \d (?= \D )' mais l'utilisation de regex est superflue ici.4 votes
Je suis juste pédant :
string
est un module de la bibliothèque standard et ne devrait probablement pas être utilisé comme nom de variable. docs.python.org/2/library/string.html