-1
votes

sauter des éléments lors de l'itération de la liste

J'ai lu des objets de classe à partir d'un fichier txt et stocké les informations dans une liste. Ma question est de savoir si je veux imprimer le premier attribut mais sauter une ligne peut-il être possible. Dites que le fichier texte est comme ceci:

for i in list:
    print(i.activity) 

Je veux faire une boucle for qui me donne le premier attribut de la liste mais saute une ligne. Par exemple en écrivant:

    Activity Time  Location
    Football  8-9  Pitch
    Basketball 9-10  Gym
    Lunch  11-12  Home
    Reading  13-14  Library

# me donne toutes les activités, mais je veux faire du football, déjeuner, lire sans basket

Est-ce possible? Si oui, j'apprécierais un code facile. Je n'ai besoin de rien de avancé


4 commentaires

peut-être for i in your_list[::2]: Cela itérera sur tous les autres éléments de la liste. N'utilisez pas la list comme nom, c'est une fonction intégrée.


Ma liste est plus grande que ce que j'ai écrit. Je viens d'écrire un exemple pour que [:: 2] saute plus d'éléments que je ne le souhaite.


Voulez-vous ignorer un seul index? Ou plusieurs, sur des positions différentes?


Un index spécifique, alors je veux que tout continue


3 Réponses :


0
votes

Bien sûr, c'est possible:

À l'intérieur de votre boucle, ajoutez la condition

i = 0
for item in list:
    if i!=1:
        print (item.activity)
    i += 1
        
    

Donc, dans la deuxième itération, rien ne serait imprimé


4 commentaires

Merci, pourriez-vous préciser avec un exemple? Je l'écris comme ceci: for i in list: if i == 1: continue print (i.activity) #Mais rien n'est imprimé


@Rezaamin Peut-être que vous avez i += 1 ci-dessous continue , auquel cas i ne i jamais incrémenté au-delà de 1 ? Au lieu de faire comme ci-dessus, essayez for i, item in enumerate(list): alors vous n'avez pas à incrémenter (ou initialiser) i vous-même.


Le gars au-dessus de moi a raison - assurez-vous que l'initialisation pour i est quand même faite, peu importe comment, vous pouvez faire ce qu'il a suggéré ou ce que j'ai fait


@jmd_dk J'ai aimé ça mais ça n'a pas sauté la ligne que je voulais. J'ai tous les attributs imprimés. pour i, item dans enumerate (djur): if i! = 2: print (item.activity)



0
votes

L'exemple ci-dessous lit simplement la chaîne de texte ( text_ ) et utilise la fonction list.pop() pour supprimer le deuxième élément (après l'en-tête). Dans ce cas, la ligne «Basketball».

Ensuite, une autre compréhension de liste simple crée la liste d' activities qui contient le premier élément de chaque ligne et ignore la ligne d'en-tête.

Exemple de code:

import io

txt = """Activity,Time,Location
Football,8-9,Pitch
Basketball,9-10,Gym
Lunch,11-12,Home
Reading,13-14,Library
"""

with io.StringIO(txt) as h:
    text_ = list(h)

Production:

['Football', 'Lunch', 'Reading']

Installer:

Remarque: ce bloc n'est pas requis pour la fonctionnalité. Utilisé uniquement pour créer la liste text_ partir d'une chaîne.

text = [i.strip().split(',') for i in text_]
text.pop(2)

activities = [i[0] for i in text[1:]]


0 commentaires

0
votes

Oui, bien sûr, mais vous devriez nommer votre liste python autre chose que list puisque list est un mot-clé en python:

row_to_skip=1

for i in range (len (my_list)):
    item=my_list[i]
    if (i==row_to_skip):
        continue
    print(item.activity)


3 commentaires

Suggestion amicale, si je peux. Cette ligne: range (0, len (my_list)) doit lire: range(len(my_list)) . Comme range et len sont des fonctions, et zéro est le point de départ par défaut de range .


je suis d'accord ! c'est plus élégant.


C'était super! Juste une question: ma liste contient des temps différents par exemple football 8-9, je veux quand même sauter la deuxième ligne comme vous l'avez fait mais je veux ajouter mes conditions qui par exemple: imprimer le football si l'utilisateur écrit qu'il arrive à 8 et laisse à 9. J'ai fait deux variables où j'ai placé mes entrées, mais cela n'a pas fonctionné tout a été imprimé (sauf la ligne sautée). Savez-vous comment je peux résoudre ce problème?