1
votes

Valeurs d'index uniques pour chaque élément d'une liste python

J'essaie de multiplier seulement un certain nombre dans une liste avec un numéro d'index pair. Ma liste contient des chiffres qui se produisent plusieurs fois. Ces nombres ont les mêmes valeurs d'index. Cependant, je veux multiplier ces nombres par 2 seulement s'ils se produisent à l'endroit tel que leur numéro d'index est pair.

Tous les forums que j'ai recherchés ont le contraire de mes besoins, où ils veulent que les numéros récurrents aient le même numéro d'index. Dans mon cas, je souhaite que les nombres récurrents aient des valeurs d'index différentes.

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = []
for i in a:
    if a.index(i) in [1,3,5,7,9]: 
        #get ascii value using ord()
        a1 = (ord(i)) * 2
    else:
        a1 = ord(i)
        my_list.append(a1)

Attendu = [50, 96, 48, 98, 52, 106, 54, 106 , 48, 104, 54]

Got = [50, 52, 54, 52, 52, 54]


0 commentaires

6 Réponses :


2
votes

Vous ajoutez uniquement dans votre branche else

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = []
for i in a:
    if a.index(i) in [1,3,5,7,9]: 
        #get ascii value using ord()
        a1 = (ord(i)) * 2
    else:
        a1 = ord(i)
    my_list.append(a1)


0 commentaires

0
votes

Ajoutez simplement my_list.append (a1) à votre instruction if :

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = []
for i in a:
    if a.index(i) in [1,3,5,7,9]: 
        #get ascii value using ord()
        a1 = (ord(i)) * 2
    else:
        a1 = ord(i)
    my_list.append(a1)

Ou mieux, exécutez-la simplement après le else :

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = []
for i in a:
    if a.index(i) in [1,3,5,7,9]: 
        #get ascii value using ord()
        a1 = (ord(i)) * 2
        my_list.append(a1)
    else:
        a1 = ord(i)
        my_list.append(a1)


0 commentaires

1
votes

Vous n'avez pas à ajouter à la liste pour la condition if

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = []
for i in a:
    if a.index(i) in [1,3,5,7,9]: 
        #get ascii value using ord()
        a1 = (ord(i)) * 2
        my_list.append(a1)
    else:
        a1 = ord(i)
        my_list.append(a1)


0 commentaires

1
votes

Les autres réponses ont porté sur le problème fondamental (le placement de append () ), mais si vous voulez être flashy, vous pouvez le faire dans une compréhension de liste en une ligne:

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = [ord(a[i])*2 if i % 2 == 1 else ord(a[i]) for i in range(len(a))]


0 commentaires

3
votes

Vous devez utiliser enumerate au lieu de index . En outre, vous pouvez en faire une compréhension de liste:

result = []
for i, c in enumerate(a):
    if i % 2 == 1:
         result.append(ord(c) * 2)
    else:
         result.append(ord(c))

Équivalent de boucle:

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
result = [ord(c) * 2 if i % 2 == 1 else ord(c) for i, c in enumerate(a)]
print(result)
# [50, 96, 48, 98, 52, 106, 54, 104, 48, 104, 54]


0 commentaires

0
votes

Il y a ici deux problèmes principaux. Comme d'autres l'ont mentionné, vous devez déplacer l ' append en dehors de la branche else. Vous supprimez également l'index actuel de l'élément de liste lorsque vous le parcourez, que vous recherchez ensuite avec a.index (i) - cela ne donnera pas le résultat correct dans le cas de éléments répétés car il renverra l'index de la première correspondance. Vous pourriez par exemple utilisez la fonction enumerate pour obtenir à la fois l'index et l'élément dans la boucle.

a = ['2', '0', '0', '1', '4', '5', '6', '4', '0', '4', '6']
my_list = []
for idx, i in enumerate(a):
    if idx in [1,3,5,7,9]: 
        #get ascii value using ord()
        a1 = (ord(i)) * 2
    else:
        a1 = ord(i)
    my_list.append(a1)


0 commentaires