6
votes

La chaîne contient tous les éléments d'une liste

Je passe à Python et je suis toujours relativement nouveau à l'approche pythonique. Je souhaite écrire une fonction qui prend une chaîne et une liste et retourne true si tous les éléments de la liste se produisent dans la chaîne.


Cela semblait assez simple. Cependant, je suis confronté à des difficultés avec ça. Le code va quelque chose comme ceci:


xxx
xxx

aussi, j'espérais aussi que quelqu'un pourrait suggérer une personne possible APPROCHE REGEX ICI. Je m'essaye aussi mes mains sur eux.


3 commentaires

Ensuite, vous seriez probablement bon en sélectionnant un meilleur problème qui nécessite une regex. Ce n'est pas le cas. En fait, vous le faites bien.


Si vous voulez aller mieux et essayer des tâches liées à la regex, essayez Regex101.com/Quiz


myfun = lambda a, b: tout (i dans A pour i en b)


5 Réponses :


14
votes
>>> all(x in 'tomato' for x in ['t','o','m','a'])
True
>>> all(x in 'potato' for x in ['t','o','m','a'])
False

3 commentaires

Et si vous voulez parcourir les caractères de la chaîne et voir si tous sont de la liste ou non?


Ensuite, utilisez une compréhension de la liste.


Pouvez-vous simplement donner une démonstration sur la façon dont je pourrais l'utiliser? Entre, je vais sûrement vérifier !!



3
votes
def myfun(str,list):
   for a in list:
      if not a in str:
         return False
   return True
return true must be outside the for loop, not just after the if statement, otherwise it will return true just after the first letter has been checked. this solves your code's problem :)

1 commentaires

Merci .. je l'ai eu maintenant. Entre entre, ces empreintes sont un peu déroutantes de dire le moins de quelqu'un de nouveau dans la langue !!



2
votes

Pour chaque lettre que vous suivez dans la liste. Donc, si la liste est de longueur n et que vous avez m lettres, la complexité est o (n * m) . Et vous pouvez atteindre O (m) si vous préprocrocessez le mot. XXX

Aussi, ce n'est pas une bonne pratique de nommer des variables comme STR et list comme si vous auriez besoin de plus tard pour créer list ou utiliser str , ils seront ombrés par vos variables. < p> Certaines informations pertinentes:


0 commentaires

2
votes

Si vous n'êtes pas inquiet pour les caractères répétés, alors:

from collections import Counter
def myfunc(string, seq):
    c1 = Counter(string)
    c2 = Counter(seq)
    return not (c2 - c1)


1 commentaires

la chaîne est un nom de module Python, de sorte que la variable de nommage string n'est pas une bonne idée



0
votes

Pour le plaisir, je pensais le faire avec des itérateurs et une carte: xxx pré>

Puis j'ai réalisé que cela fait essentiellement la même chose que la réponse acceptée, mais probablement avec plus d'appels de méthodes . P>

def myfun(str, list):
    return all(letter in str for letter in list)


0 commentaires