Trouver la somme de sous-ensembles d'une liste en python
C'est probablement très simple et je suis surplombant quelque chose...
J'ai une longue liste d'entiers, dans ce cas, représentant quotidien de visiteurs d'un site web. Je veux une nouvelle liste de hebdomadaire visiteurs. J'ai donc besoin d'obtenir des groupes de sept à partir de la liste d'origine, en somme, et de les ajouter à une nouvelle liste.
Ma solution semble assez de force brute, peu élégante:
numweeks = len(daily) / 7
weekly = []
for x in range(numweeks):
y = x*7
weekly.append(sum(visitors[y:y+7]))
Est-il plus efficace, ou plus pythonic façon de faire cela?
C'est effectivement une bonne question pour codereview.stackexchange.com qui est spécialement pour l'amélioration de code qui fonctionne pour le rendre plus rapide/plus élégant.
Merci...ne savais pas que stackexchange site. Il est difficile de savoir lequel est adapté pour de la remise en question, en particulier car il ya tellement de nombreux ces jours-ci. De Plus, celui-ci semble avoir tous les yeux, donc j'ai toujours l'impression que l'original est mieux. 🙂
Rien de mal avec ce code - il est simple et communique son intention. Je venais de changer le var noms à quelque chose de plus descriptif que
La différence est que là-bas, vous avez l'attention de gens qui aiment la lecture d'autres personnes de code pour comprendre comment mieux faire les choses.
Merci...ne savais pas que stackexchange site. Il est difficile de savoir lequel est adapté pour de la remise en question, en particulier car il ya tellement de nombreux ces jours-ci. De Plus, celui-ci semble avoir tous les yeux, donc j'ai toujours l'impression que l'original est mieux. 🙂
Rien de mal avec ce code - il est simple et communique son intention. Je venais de changer le var noms à quelque chose de plus descriptif que
x
et y
, mais sinon c'est préférable à toute compréhension de la base de hackLa différence est que là-bas, vous avez l'attention de gens qui aiment la lecture d'autres personnes de code pour comprendre comment mieux faire les choses.
OriginalL'auteur fitzgeraldsteele | 2011-05-26
Vous devez vous connecter pour publier un commentaire.
Ou un peu moins densément:
Par ailleurs, en utilisant le module numpy.
À noter que cela nécessite le nombre d'éléments dans visiteur être un multiple de 7. Il faut aussi que vous installer numpy. Cependant, c'est probablement aussi plus efficaces que les autres approches.
Ou pour itertools code bonus:
y=x*7
avec un autre arg àrange()
.+1 pour l'inclusion de la itertools.izip_longest cas, j'espère que vous n'en avais pas donc j'ai pu le mentionner. 🙂
Aussi, pour les grands ensembles de visiteurs ou si le visiteur est un générateur, la itertools.izip_longest et itertools.imap options sont plus efficaces, et j'utilise un
xrange
au lieu d'unrange
appel dans le premier exemple.Je ne connaissais pas le 3ème argument de gamme. Piles Incluses, en effet...
OriginalL'auteur Winston Ewert
Je ne suis pas sûr si c'est "pythonic", mais j'aime vraiment cette seule ligne, des trucs de python.
Détails Techniques: Interprétations de la
OriginalL'auteur Linmic
À l'aide de itertools.islice:
Edit:
ou, avec les mathématiques.fsum:
OriginalL'auteur riza