2017-10-19 7 views
-3

J'ai besoin de multiplier différentes listes pour calculer des zones de polygones irréguliers.Multiplication de listes en Python

X = [1,1,1,1,1,1] 
Y = [5,4,3,2,1,0] 

Cela signifie que les coordonnées du point 1 sont (1,5), pour le point 2 sont (1,4) et ainsi de suite. Pour calculer la superficie, je dois multiplier X[i] * Y[i+1] qui est égal à 1 * 4, 1 * 3, 1 * 2 et exclure la dernière multiplication, comme 1 * empty.

Comment est-ce que je peux faire ceci?

+5

"Comment est-ce que je peux faire ceci?" Qu'avez-vous essayé? – DeepSpace

+3

À quoi devrait ressembler votre sortie? Qu'avez-vous essayé? S'il vous plaît [modifier] la question. – Tgsmith61591

+0

Avec la fonction de carte et un bon découpage de votre liste, il devrait être facile à faire – Axnyff

Répondre

4

Alors, dans ma compréhension, vous avez besoin d'un décalage entre X et Y, où le premier élément de Y est exclu, et le dernier élément de X est exclu. En d'autres termes, vous avez besoin quelque chose comme:

[(1, 4), (1, 3), (1, 2), (1, 1), (1, 0)] 

Vous pouvez produire ci-dessus via:

zipped = zip(X[:-1], Y[1:]) 

et vous pouvez calculer les produits de chaque paire comme ceci:

[a * b for a, b in zipped] 

de Bien sûr, si X et Y étaient des tableaux numpy, vous pouvez le faire beaucoup plus efficacement:

>>> X[:-1] * Y[1:] 
array([4, 3, 2, 1, 0]) 
+1

Pour être honnête, vous n'avez même pas besoin de découper X. 'zip (X, Y [1:])' donnera la même sortie car 'zip' s'arrête quand il consomme le plus court itérable. Ne pas découper X économise de la mémoire. – DeepSpace

2

Quelque chose comme

[x * y for x, y in zip(X, Y[1:])] 

le ferait. Mais vous devriez vraiment utiliser Numpy pour tout ce qui n'est pas trivial.

+0

Je ne peux pas utiliser numpy uniquement "Python", je sais qu'avec numpy ce serait facile. Merci! – Daniel