Générer une liste de nombres en Python
Fondamentalement, j'ai besoin d'aide dans la production de nombres à partir d'une liste que j'ai créée en Python:
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, ...]
J'ai essayé un couple de différentes méthodes, mais à chaque fois j'ai l'impression, il y a un nombre impair mélangé avec des evens!
Je sais comment générer de pair/impair nombre si je devais faire une échelle de 0 à 100, cependant, que le même nombre d'précédentes, la liste m'a déconcerté les!
P. S. j'ai seulement été à l'aide de python pour un couple de jours, si cela s'avère être extrêmement simple, merci d'avance!
EDIT: Merci pour toutes les réponses, avec votre aide, j'ai obtenu par le biais de ce petit problème.
Voici ce que j'ai à remplir un peu d'excercice demandant de faire la somme des nombres de fibonacci:
F = [1, 2]
while F[-1] < 4000000
F.append(F[-1] + F[-2])
sum(F[1::3])
4613732
Quelles ont été les différentes méthodes que vous avez essayé?
Un peu étrange que vous avez réussi à générer une séquence de Fibonacci avant vous pouvez filtrer une liste... 😉
OriginalL'auteur user1486654 | 2012-06-27
Vous devez vous connecter pour publier un commentaire.
Utiliser une liste de compréhension (voir: La recherche d'une liste d'objets en Python)
C'est bien parce que ça laisse de la liste intacte, et vous pouvez travailler avec evensList comme un objet de la liste.
Espérons que cette aide!
Je pense que la compréhension de liste pourrait être un peu avancé pour les premiers jours avec python... mais c'est juste mon avis!
interprétations de la liste sont l'une des meilleures parties sur python... pourquoi ne pas introduire dès le début?
Oh je suis d'accord, mais c'est la meilleure pratique - et il lui laisse un objet de la liste.
Je pense juste qu'il serait plus sain pour apprendre les boucles for tenants et les aboutissants avant d'entrer dans la compréhension de liste. Mais encore une fois, à mon humble avis.
OriginalL'auteur Erty Seidohl
L'exemple suivant devrait résoudre votre problème.
OriginalL'auteur 8bitwide
Dans votre cas particulier
my_list[1::3]
fonctionne. Il y a toujours deux entiers impairs entre même entiers dans de fibonacci: pair, impair, pair, impair, bizarre, bizarre.....Je vois que vous êtes découpage de la liste, mais il y a deux virgules? Qu'est-ce que cette méthode est appelée?
Le troisième numéro est le "stride". Vous commencez à le premier élément, puis prendre chaque 3ème élément de la suite.
Ohhh très cool. +1
ce sera toujours le cas pour de fibonacci.
OriginalL'auteur Akavall
Vous pouvez faire cela avec une compréhension de liste:
Vous pouvez également utiliser le
filtre
function.Si la liste est très longue, il peut être souhaitable de créer quelque chose d'itérer sur la liste plutôt que de créer une copie de la moitié de l'aide
ifilter
paritertools
:Ou à l'aide d'un générateur d'expression:
Pouah,
ifilter
? Juste(x for x in numbers if not x % 2)
œuvres.Ont ajouté un générateur d'expression, même si je suis allé pour
n % 2 == 0
OriginalL'auteur Dave Webb
Il suffit de cocher cette
OriginalL'auteur Ankit Vyas
parcourir la liste et l'utilisation de l'opérateur modulo de vérifier, même
d'accord...je n'ai jamais vu avant. Ils regardent rapide et efficace!
OriginalL'auteur javajavajava
Juste pour le fun, vérifier si les
number%2 != 1
fonctionne aussi 😉Note que vous pouvez faire des choses intelligentes afin de séparer les evens et les cotes dans une boucle:
Ci-dessus astuce fonctionne parce que les expressions logiques (
==
,>
, etc.) d'exploitation sur les numéros deTrue
(1) et/ouFalse
(0).OriginalL'auteur mgilson
Vous pouvez utiliser compréhension de liste pour générer une nouvelle liste contient uniquement les membres de votre liste d'origine.
alors:
rendements
Ou vous pouvez également utiliser un générateur d'expression si vous n'avez pas besoin de tous ces numéros
à la fois:
Les valeurs serait alors disponible en tant que de besoin, par exemple, si vous avez utilisé une boucle for:
par exemple,
L'avantage du générateur d'expression, c'est que l'ensemble de la liste n'est pas générée et stockée dans la mémoire à la fois, mais les valeurs sont générées lorsque vous en avez besoin qui fait moins appel à la mémoire. Il y a d'autres différences importantes, vous pourriez vouloir lire jusqu'à un certain point, si vous êtes intéressé.
OriginalL'auteur Levon
Au lieu de générer tous les nombres de Fibonacci, puis de filtrage pour les evens, pourquoi ne pas générer simplement les même valeurs?
génère [2, 8, 34, 144, 610, 2584, 10946 ...]
alors votre somme code devient:
ou
OriginalL'auteur Hugh Bothwell
Vous pouvez le faire en utilisant la fonction de filtre comme suit:
OriginalL'auteur Eng.Boniphace Udoya
Vous pouvez utiliser un pour et si la boucle à l'aide de la longueur de la fonction, comme ceci:
OriginalL'auteur Adeesh Jain
Fondamentalement, vous devez créer une variable et de mettre votre liste et ensuite trier vos même liste de numéros en l'ajoutant uniquement les numéros de
numbers = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, ...]
even = [e for e in numbers if e%2==0]
OriginalL'auteur gxet4n
step
argumentrange
.OriginalL'auteur user3894953