Je ne suis pas sûr de pouvoir me clarifier mais j'essaierai.
J'ai un tuple en python que je passe comme suit (voir le code ci-dessous). En le parcourant, je maintiens un compteur (appelons-le "n") et des éléments "pop" qui remplissent certaines conditions.
Maintenant, bien sûr, une fois le premier élément affiché, la numérotation ne va pas, comment puis-je faire ce que je veux faire avec plus d'élégance tout en supprimant certaines entrées d'un Tuple à la volée?
for x in tupleX:
n=0
if (condition):
tupleX.pop(n)
n=n+1
ok je me suis débrouillé pour le faire.
Je stocke la valeur "n" dans la boucle for lorsque la condition est satisfaite dans une liste (appelons-la delList), puis procédez comme suit:
for ii in sorted(delList, reverse=True):
tupleX.pop(ii)
Toutes les autres suggestions sont également les bienvenues.
Comme DSM
le mentionne, Tuple
est immuable, mais même pour les listes, une solution plus élégante consiste à utiliser filter
:
tupleX = filter(str.isdigit, tupleX)
ou, si condition
n'est pas une fonction, utilisez une compréhension:
tupleX = [x for x in tupleX if x > 5]
si vous avez vraiment besoin que tupleX soit un tuple, utilisez une expression de générateur et transmettez-la à Tuple
:
tupleX = Tuple(x for x in tupleX if condition)
Peut-être que vous voulez des dictionnaires?
d = dict( (i,value) for i,value in enumerate(tple))
while d:
bla bla bla
del b[x]
Un tuple est déclaré immuable.
Et vous n'allez pas faire apparaître un élément à l'intérieur de l'itération, cela provoque une erreur, car il modifie la longueur de la liste obj .
tupleX = Tuple( [ e for e in list( tupleX ) if not condition( e ) ] )
Cela permet de conserver les éléments qui ne correspondent pas à la condition plutôt que de les supprimer de la liste/du tuple.
Mais si vous avez l’intention de le faire de la même manière que vous le souhaitez, vous devez faire votre liste à l’avance par qh comme listX = list( tupleX )
. vous feriez mieux d’ajouter l’index des matériaux non désirés à l’intérieur de l’itération dans une liste (non désirée_list), et d’itérer les éléments non désirés et ajoutés à la liste originale. puis rendez-vous à Tuple comme Tuple( listX )
Oui, nous pouvons le faire… .. D'abord, convertissez le Tuple en une liste, puis supprimez l'élément de la liste après l'avoir reconverti en Tuple.
Démo:
my_Tuple = (10, 20, 30, 40, 50)
# converting the Tuple to the list
my_list = list(my_Tuple)
print my_list # output: [10, 20, 30, 40, 50]
# Here i wanna delete second element "20"
my_list.pop(1) # output: [10, 30, 40, 50]
# As you aware that pop(1) indicates second position
# Here i wanna remove the element "50"
my_list.remove(50) # output: [10, 30, 40]
# again converting the my_list back to my_Tuple
my_Tuple = Tuple(my_list)
print my_Tuple # output: (10, 30, 40)
Merci
Il existe une solution simple mais pratique.
Comme le dit DSM, les n-uplets sont immuables, mais nous savons que les listes sont mutables ..__ Donc, si vous changez un tuple en liste, il sera mutable. Ensuite, vous pouvez supprimer les éléments par la condition, puis après avoir changé le type à nouveau un Tuple. C'est tout.
Veuillez regarder les codes ci-dessous:
tuplex = list(tuplex)
for x in tuplex:
if (condition):
tuplex.pop(tuplex.index(x))
tuplex = Tuple(tuplex)
print(tuplex)
Par exemple, la procédure suivante supprimera tous les nombres pairs d'un tuple donné.
tuplex = (1, 2, 3, 4, 5, 6, 7, 8, 9)
tuplex = list(tuplex)
for x in tuplex:
if (x % 2 == 0):
tuplex.pop(tuplex.index(x))
tuplex = Tuple(tuplex)
print(tuplex)
si vous testez le type du dernier tuplex, vous constaterez qu'il s'agit d'un tuple.
Enfin, si vous souhaitez définir un compteur d’index comme vous l’avez fait (c’est-à-dire n), vous devez l’initialiser avant la boucle et non dans la boucle.