1
votes

Fractionner une chaîne dans une liste pour rechercher et remplacer des éléments en python

J'ai une liste de paires de devises, disons par exemple qu'elle ressemble à ceci:

['EURUSD']
['CHFUSD']

Ce que je cherche à faire est de parcourir cette liste, en changeant le USD en GBP en aboutir à une nouvelle liste qui afficherait:

for pair in cp:
   split_pair = pair.split()

La façon dont je supposais que je le ferais serait de parcourir chaque paire, de diviser la chaîne en une liste, de supprimer la dernière 3 éléments, puis ajoutez «G», «B», «P» en tant que nouveaux 3 derniers éléments, puis renvoyez-le dans une chaîne et ajoutez-le à la nouvelle liste, «new_cp».

Le code avec lequel j'ai commencé était:

new_cp = ['EURGBP', 'CHFGBP', 'JPYGBP', 'CADGBP']

Cependant, tout cela aboutit à obtenir:

cp = ['EURUSD', 'CHFUSD', 'JPYUSD', 'CADUSD']

etc .

Donc, il s'agit simplement de diviser la liste, pas de diviser la chaîne pour chaque paire de devises dans la liste.

Je sais que c'est relativement débutant, mais je suis vraiment perplexe. Je ne comprends tout simplement pas pourquoi cela ne fonctionne pas.

Si vous pouvez aider avec ce que je fais mal là-bas, ou même suggérer un moyen plus efficace de réaliser ce que je cherche être vraiment apprécié.


3 commentaires

Comment .split est-il censé savoir que vous voulez dire divisé en deux ensembles de trois caractères? Par défaut, il se divise sur n'importe quel espace , dont il n'y en a pas.


.split () sans argument, se divise en espace, il n'identifiera pas par magie que vous voulez la limite à 'USD' / après 3 caractères - envisagez plutôt de découper la chaîne ou en utilisant .replace ()


votre structure de données semble également sous-optimale, une liste de tuples ou un dict semblerait plus naturelle, par exemple. [('EUR', 'USD'), ('CHF', 'USD')] etc.


4 Réponses :


4
votes

Vous pouvez y parvenir en utilisant replace dans une liste de compréhension:

cp = ['EURUSD', 'CHFUSD', 'JPYUSD', 'CADUSD']
new_cp = [word.replace('USD', 'GBP') for word in cp] 
#i.e.: for word in cp, we apply the specified function to it - replace the 'USD' in that word with 'GBP' - and then append it to a new list
print(new_cp)

sorties: ['EURGBP', 'CHFGBP', 'JPYGBP' , 'CADGBP']


0 commentaires

5
votes

Je suggérerais d'utiliser la méthode .replace ()

Par exemple:

cp = ['EURUSD', 'CHFUSD', 'JPYUSD', 'CADUSD']
new_cp = []

for currency in cp:
    new_cp.append(currency.replace('USD', 'GBP'))

print(new_cp)

>> ['EURGBP', 'CHFGBP', 'JPYGBP', 'CADGBP']

J'espère que cela aide :)


1 commentaires

une ligne: [(currency.replace ('USD', 'GBP') pour la devise en ['EURUSD', 'CHFUSD', 'JPYUSD', 'CADUSD']]



3
votes

Si vous savez que chaque paire de devises contiendra USD comme trois derniers caractères, le moyen le plus efficace consiste simplement à utiliser l'indexation de liste et à ajouter GBP :

new_cp = [i[:-3] + 'GBP' for i in cp]


0 commentaires

2
votes

Voici une autre solution. Vous pouvez utiliser RegEx pour remplacer les valeurs de devise.

EURGBP
CHFGBP
JPYGBP
CADGBP

Résultat:

import re

cp = ['EURUSD', 'CHFUSD', 'JPYUSD', 'CADUSD']

mycurr = 'GBP'

to_curr = re.compile("USD")

for pair in cp:
    print(to_curr.sub(mycurr, pair))


0 commentaires