0
votes

Ajouter une chaîne à chaque élément de la liste Python en fonction de la condition

Je veux ajouter la chaîne "équité" à chaque élément dans une liste si le troisième dernier caractère de l'élément est "". Sinon, je voudrais ajouter «index». Idéalement, je ne veux pas utiliser des boucles s'il y a un moyen.

Par exemple, je souhaite la liste ci-dessous xxx

pour ressembler à la liste ci-dessous xxx

aucune idée de la façon dont je peux faire cela?

merci!


5 commentaires

Il n'y a aucun moyen de le faire sans boucle. Ils se posent de savoir si ce sera explicite (compréhension de la liste) ou implicite (si abusant des pandas)


Est la longueur de toutes les chaînes de la liste au moins 3? Sinon, des solutions basées sur s [-3] lanceront des erreurs d'exécution à l'occasion.


DeepSpace - Je suis à peu près sûr qu'il pourrait y avoir un moyen de créer une fonction, puis d'appliquer cette fonction à la liste, mais je ne sais tout simplement pas comment John Coleman - Ouais, ils seront au moins 4


@ pythonlearner13 mais la boucle devra toujours être quelque part , dans votre code ou dans un cadre de cadre / bibliothèque. C'est exactement ce que je voulais dire par boucle explicite / implicite


@Johncoleman utilise ensuite s [-3: -2]


3 Réponses :


2
votes

une solution d'une ligne xxx

si vous utilisez la version python plus ancienne, puis 3.6 xxx

* N'utilisez pas Liste < / code> comme nom de variable, c'est un type intégré.


6 commentaires

... sinon f '{Word} index' ...


@Deepacace mon mauvais, corrigé.


Je reçois le fichier d'erreur suivant "", ligne 2 mots = [F '{Word} équité' Si Word [-3] == '' autre f '{Word} index' pour Word En mots] ^ SyntaxError: Syntaxe invalide


@ pythonlearner13 Vous ne pouvez pas consulter tous les articles i une liste sans utiliser de boucle ni d'équivalent d'une boucle.


La version est 3.5.5


@ Pythonlearner13 F-String est à Python 3.6 et plus récent, a ajouté une solution sans elle.



1
votes

Vous pouvez le faire avec un compréhension de la liste contenant Expression conditionnelle .

>>> input_list = ['VOD LN','HSBA LN', 'DOKA SS','SXNE', 'KERIN FH','YORK GY','SXNP']
>>> result = [x + (' Equity' if len(x)>=3 and x[-3]==' ' else ' Index') for x in input_list]
>>> result
['VOD LN Equity', 'HSBA LN Equity', 'DOKA SS Equity', 'SXNE Index', 'KERIN FH Equity', 'YORK GY Equity', 'SXNP Index']


0 commentaires

2
votes

semble qu'il peut vous aider:

items = ['VOD LN','HSBA LN', 'DOKA SS','SXNE' 'KERIN FH','YORK GY','SXNP']

def update(item: str) -> str:
    if len(item) > 3 and item[-3] == ' ':
        return item + ' Equity'
    return item + ' Index'

updated_items = [
    update(item) for item in items
]


2 commentaires

Je pense que c'est la meilleure réponse car elle fait une vérification de sécurité sur la longueur des cordes. Même si ce n'est pas nécessaire dans l'affaire OP (ils n'ont pas précisé), la programmation défensive est bonne à long terme. Une boucle explicite qui gère des cas de bord est préférable à un one-liner qui pourrait échouer.


@Johncoleman Un doublure de travail OUT -3: S [-3: -2] ou la vérification de la longueur peut être effectué à l'intérieur de la compréhension de la réponse de Khelwood.