0
votes

Vérifiez si une chaîne contient une chaîne sauf une liste

J'ai une chaîne comme suit:

for i in f:                                                                                                                        
    if i != 'A' and i != 'C' and i != 'G' and i != 'T':                                                                             
        print(i)


5 commentaires

Voulez-vous vérifier si les caractères ne sont pas dans la chaîne ou souhaitez-vous imprimer tous les caractères sauf certains caractères? Ce sont 2 tâches différentes


Je veux savoir s'il y a un caractère dans la chaîne F sauf 'a', 'c', 'g' ou 't'. Si oui, je veux l'imprimer.


Votre principale raison de ne pas vouloir une boucle le temps / l'efficacité? Les ensembles semblent être un bon endroit pour optimiser une recherche, mais au coût de la conversion d'une chaîne à un ensemble, qui peut avoir un traitement de traitement important.


Est-ce que cela répond à votre question? Vérifiez si une chaîne contient uniquement des caractères


Voulez-vous dire sans utiliser de pour boucle ou une construction de boucle. Par exemple, sous la hotte, des méthodes de programmation fonctionnelle ( tout , mappe ), et on pourrait faire valoir que regex fait aussi. Pour plus de clarté Voulez-vous éviter toute fonction qui utilise une construction en boucle, ou d'éviter les fonctions de boucle de base, telles que pour , pendant , etc.? Si le premier, peut-être définir , pour ce dernier, je prendrais probablement une approche de regex ( correspondant ).


4 Réponses :


0
votes

juste faire xxx

il vérifie si la liste contient une charlette de la liste


si vous ne voulez pas boucler le Liste Vous pouvez faire: xxx


2 commentaires

"Y a-t-il un moyen de réaliser cela sans boucle via la chaîne?" Ce code fait exactement ce que propose, juste à une manière de Néater (qui n'était pas le principe de la question)


C'est vrai. Je l'ai modifié pour que cela réponde maintenant aux exigences



3
votes

Selon la taille de votre chaîne d'entrée, la boucle pour pourrait être la solution la plus efficace.

Cependant, puisque vous demandez explicitement une solution sans boucle explicite, cela peut être fait. avec une regex. xxx

sorties xxx


0 commentaires

3
votes

Vous pouvez utiliser définir code> pour obtenir la sortie souhaitée.

{'Y','X','Z'} #characters in f which are not equal to 'A','C','G','T'


4 commentaires

CORRECT si OP ne se soucie pas de la commande ou de la duplication (si f = 'abca'; not_valid = {'a'} impression aa aa aa )?


@DeepSpace Désolé, je n'ai pas compris votre requête (si f = 'abca'; no_valid = {'a'} Imprimer A ou AA)? Si cela ne vous dérange pas, pouvez-vous expliquer?


S'il y a des caractères manquants dupliqués, votre solution n'imprimera que l'une d'entre elles et également en panne (car les ensembles sont sans ordonnance). Je ne dis pas que c'est mauvais, juste que OP ne spécifiait pas ce qu'ils veulent


@Deepspace Ma première approche utilisait Regex mais dans l'un des commentaires mentionné cela Je veux savoir s'il y a un caractère dans la chaîne F, sauf 'a', 'c', 'g' ou 't' < / I> Donc, je pensais que l'ensemble est l'une des options.



0
votes

Techniquement, cette boucle mais nous convertissons votre chaîne d'entrée en un ensemble qui supprime les valeurs dupliquées xxx


1 commentaires

J'ai aussi pensé à cela, mais je ne savais pas si cela compte comme "boucle"