J'ai la liste des listes Mon objectif est de faire une comparaison d'élément par élément et de découvrir le nombre de listes de une condition et un compteur Vérifiez si les A touchent le X. Remarque: je ne suis pas intéressé par le comptage combien d'éléments em> avec une liste, A1 par exemple, Touch X1. Une fois A1 et X1 touch, je compte cela et peut passer à A2, et ainsi de suite. P> Cependant, le compteur ne se met pas à jour correctement. Des suggestions sur la façon de résoudre ce problème? Voici mon code. Les résultats que j'attends sont présentés sous le code. P> EDIT STRY> P> Pour clarifier le résultat attendu, j'ai mis à jour l'exemple en ajoutant une deuxième valeur à x code>. Donc, avez-vous mis à jour à partir de A code> contenant 7 listes et une liste des listes
x code> contenant 2 listes. Je veux tester les listes dans
a code> contre ceux de
x code>.
A code> Toutes les valeurs sont plus grandes que l'élément correspondant dans
x code>. p>
x = [[10], [14]] code> à
x = [[10, 11], [14, 12]] code> p> Ceci est mis à jour ci-dessous. P>
[1, 2]
4 Réponses :
J'ai une perspective différente. En Python, vous pouvez voir que:
x = [[10], [14]] a = [[9, 10], [10, 11], [11, 12], [12, 13], [13, 14], [14, 15], [15, 16]] def touch(e, f): e = [q for p in e for q in p] # [10, 14] return sum([1 for sub_list in f if sub_list > e]) print(touch(x, a))
Voici une solution simple sans avoir besoin de numpy code>
Il y a tellement de complexité dans cependant et cela ne semble pas pythonique
Je ne peux pas suivre votre raisonnement dans votre code, mais vous pouvez vérifier un contre x dans une compréhension de liste unique: Selon ce que vous avez vraiment besoin, vous pouvez changer le > code> condition to
> = code> ou comptez soit faux strong> ou
x = [[10, 11], [14, 12]]
a = [[9, 10], [10, 11], [11, 12], [12, 13], [13, 14], [14, 15], [15, 16]]
def touch(x, a):
return [[all([asel > xsubel for xsubel in xel for asel in ael]) for ael in a].count(False) for xel in x ]
touching = touch(x, a)
print(touching)
Et si les listes de x code> auraient également plusieurs éléments? Par exemple, si
x = [[10, 12], [14, 13]] code>.
Ensuite, vous devriez aussi boucler les listes intérieures de X. Voir la réponse mise à jour.
Génial! Ce que je ne comprends pas, c'est que lorsque vous ajoutez une liste supplémentaire à A code>, dites "` "[17, 18]" `` `", le compteur reste le même. Pendant que je m'attendrais à ce que cela soit mis à jour.
Bien sûr, c'est la même chose: vous ajoutez une liste de plus qui compte comme vrai. Essayez d'ajouter [7,8] à la place ou essayez de compter true au lieu de faux.
Oui, bien sûr - vous avez raison. Mon erreur. Merci beaucoup. Quelle compréhension étonnante de liste. Je ne savais pas qu'ils pourraient être ce complexe. Merci beaucoup.
Les compréhensions de la liste sont-elles calculées de manière coûteuse? Lors de l'extension de la liste dans x code> et
A code> à des centaines d'articles et ajout de milliers de listes, les calculs fonctionnent toujours mais deviennent lents. Y a-t-il une manière plus efficace?
Au contraire: le plus souvent, ils sont plus efficaces. Vous pouvez trouver plusieurs discussions sur ce site. Mais si vous souhaitez créer une liste à l'aide de la liste des boucles (imbriquées), les compréhensions de liste sont souvent une meilleure alternative.
J'ai vérifié à nouveau, mais le résultat que j'attends est [2, 6]. Je comparais pour chaque liste dans A code> et
x code>, élément 1 dans
A code> à l'élément 1 dans
x code>, élément 2 dans
A code> à l'élément 2 dans
x code>. Donc: A1_1 (9) (élément 1 de la liste 1 de a) est inférieur à X1_1 (10). A1_2 (10) est égal à x1_2 (10) - de sorte que deux violations de la maladie. A3_1 (11)> x1_1 (10) et A3_2 (12)> x1_2 (11) et les autres listes d'A sont également supérieures à leurs éléments correspondants. Pour x2 (2e liste dans x): toutes les listes d'A sont inférieures à l'exception de A7, dans laquelle A7_1 (15) est supérieure à X2_1 et A7_2 est supérieure à X2_2. Par conséquent [2, 6].
Comme je l'ai dit, vous pouvez modifier le comptage de faux pour compter les vrais dans la compréhension de la liste. Avec votre liste d'origine, ces rendements [5,1]: premier élément dans A = False, deuxième élément d'A = False (10 n'est pas supérieur à 10), et les 5 autres éléments sont vrais.
Vous pouvez utiliser NUMPY pour éviter les boucles. Dans le code ci-dessous, j'ai supposé que la liste x code> était 1-D à partir de la manière, car il semble que les sublistes contiennent consistent en 1 élément.
import numpy as np
x = [10,14]
a = [[9, 10], [10, 11], [11, 12], [12, 13], [13, 14], [14, 15], [15, 16]]
e = np.array(x)
f = np.array(a)
touching = (np.sum(np.any(f[...,np.newaxis] <= e, axis = 1), axis = 0))
print(touching)
Pourquoi le résultat serait-il
[2, 6] code>?
Pouvez-vous s'il vous plaît expliquer comment vous dérivez votre résultat attendu de vos données d'entrée?
Ne devrait pas être [5,1] le résultat?
J'attends
[2, 6] code> car aucun élément dans les listes dans
A code> peut être inférieur ou égal à l'élément dans
x code>. Seule la dernière liste dans
A code> rencontre cette condition par rapport à
x2 code>.
Ensuite, la phrase "Découvrez pour combien de listes dans
A code> toutes les valeurs sont plus grandes que l'élément correspondant dans
x code>" doit être corrigé.
S'il vous plaît expliquer, vous pouvez avoir raison. Mais "Découvrez le nombre de listes de toutes les valeurs de toutes les valeurs que l'élément correspondant de x" peut être testé en comptant le nombre de personnes violents NP.all (F> LST). Droite?