0
votes

Comment structurer la boucle pour me donner la sortie correcte? La liste générée est plus longue qu'il ne devrait être

J'ai deux listes ( tb_shade code> et tb_sun code>) que j'essaie de itérer et appendez un 1 code> à une troisième liste ( Activity_Status code>) Si un critère est rempli ou un 0 code> sinon. Le tb_shade code> et tb_sun code> est la même longueur (8760). Et j'essaie de créer une troisième liste ( Activity_status code>) qui est également la même longueur, et qui a une valeur de 0 code> si l'une des valeurs de tb_shade code> ou tb_sun code> est en dehors de la plage numérique: 29-39 ou un 1 code> si les valeurs sont dans cette plage. J'ai essayé de quelques manières différentes. J'ai inclus deux de ces tentatives ci-dessous. Ni l'un ni l'autre ne fonctionne.

Le premier essai ajoute 0 code> pour toutes les lignes de la liste, même si je sais que les critères sont satisfaits à certains moments. Le deuxième essai a une sortie Activity_Status CODE> Liste des valeurs 122268322 Long. Il devrait être identique à celui des tb_sun code> et tb_shade code> 8760. Est-ce que quelqu'un sait comment faire fonctionner cela? Toute aide ou conseil serait appréciée! Merci! P>

Essayez d'abord P>

    
activity_status=[]    
for i in range(len(tb_shade)):
    for q in range(len(tb_sun)):
        if tb_shade[i] > 39 or tb_sun[q] < 29:
            activity_status.append(0)
        if tb_shade[i] < 39 or tb_sun[q] > 29:
            activity_status.append(1)
print(len(activity_status)) #122268322
print(len(tb_shade)) #8760 


1 commentaires

FYI: Les questions de réponse minutieuse consomment-elles du temps. Si votre question est résolue , dites merci par accepter la solution meilleure pour vos besoins . le le B> Accepter le chèque est sous la flèche haut / bas en haut à gauche de la réponse. Une nouvelle solution peut être acceptée si un meilleur apparaît. Vous pouvez également voter sur la qualité / utilité d'une réponse, avec la flèche haut ou bas, si vous avez une plus grande réputation. Laisser un commentaire Si une solution ne répond pas à la question. Que dois-je faire quand quelqu'un répond à ma question? . Merci.


3 Réponses :


0
votes

Utilisation de la compréhension de la liste, l'élément est 1 si les valeurs de tableau TB_SHADE et TB_SUN sont dans la plage [29, 39]. Sinon, l'élément est 0. xxx


2 commentaires

Merci pour votre réponse Pramote! J'ai changé votre code en Activity_Status = [1 si (29 <= ombre <= 39 ou 29 <= Sun <= 39) € 0 pour l'ombre, Sun in TB_SUN)] ET IT Travaillé parfaitement!


Ajout de quelques explications à ce code améliorerait considérablement la qualité de cette réponse. Voir https://stackoverflow.com/help/how-to-answer



1
votes

Votre deuxième essai est presque correct. Vous avez niché pour des boucles, donc ce que vous faites réellement est en boucle sur tb_sun 8760 fois et comparer chaque valeur de chaque tableau les uns avec les autres. Essayez ceci: xxx


2 commentaires

Merci pour l'aide ici! Bien que lorsque j'exécute votre code, la liste Activity_Status a une longueur de 15400 au lieu de 8760 et je ne sais pas pourquoi


Ma faute. Utilisez ELIF au lieu de si la deuxième instruction SI.



1
votes

Vous utilisez une itération avec une itération et cela vous donne le carré du résultat que vous attendez. c'est-à-dire au lieu de compter juste de 0 à 8759, il boucle de 0 à 8759 pour 8760 fois pour 8760 fois.

à la place, vous pouvez utiliser un pour la boucle et utiliser cela pour itération des deux listes. P>

second, votre Les critères ne sont pas mutuellement exclusifs de ce que vous avez écrit. Par exemple, si les deux nombres de tb_shade et tb_sun sont respectivement de 30 et 50 respectivement, les deux clauses sont remplies et elles seront toutes deux exécutées. En supposant que vous essayez de vérifier si les chiffres dans les deux cas sont compris entre 29 et 39, j'ai apporté des modifications à votre code. P>

activity_status=[]    
for i in range(len(tb_shade)):
    if tb_shade[i]>29 and tb_shade[i]<39 and tb_sun[i]>29 and tb_sun[i]<39:
        activity_status.append(1)
    else:
        activity_status.append(0)

print(len(activity_status)) #should give 8760 if both lists are of length 8760
print(len(tb_shade)) #8760 


2 commentaires

Merci pour cette réponse Siem! Ce code fonctionne, mais je suis légèrement incertain si cela me donne ce que je veux ... J'essaie d'obtenir un 1 ajouté à la liste Activity_Status si l'ombre ou le nombre de sun est compris entre 29 et 39 ans, mais je n'ai pas besoin de ces deux chiffres dans la gamme. Je pense que votre code est écrit de sorte que seul un 1 est ajouté si les deux chiffres sont dans cette plage, non?


Oui, le code vérifie si les deux chiffres sont dans cette plage. Si vous souhaitez vérifier si l'un ou l'autre est dans cette plage, vous pouvez remplacer la seconde "et" dans la troisième ligne avec "ou".