Est-ce la façon dont vous paginez, ou est-il un meilleur algorithme?
Je veux être en mesure de prendre une séquence comme:
my_sequence = ['foo', 'bar', 'baz', 'spam', 'eggs', 'cheese', 'yogurt']
Utiliser une fonction comme:
my_paginated_sequence = get_rows(my_sequence, 3)
Pour obtenir:
[['foo', 'bar', 'baz'], ['spam', 'eggs', 'cheese'], ['yogurt']]
C'est ce que j'ai trouvé juste par la pensée à travers elle:
def get_rows(sequence, num):
count = 1
rows = list()
cols = list()
for item in sequence:
if count == num:
cols.append(item)
rows.append(cols)
cols = list()
count = 1
else:
cols.append(item)
count += 1
if count > 0:
rows.append(cols)
return rows
thx, ne pense pas à le rajouter. Aussi, vous êtes un ninja par hasard???
double possible de le Rendement de plusieurs objets à la fois à partir d'un objet iterable objet?
double possible de Comment vous répartissez vous une liste en morceaux de taille égale en Python?
double possible de le Rendement de plusieurs objets à la fois à partir d'un objet iterable objet?
double possible de Comment vous répartissez vous une liste en morceaux de taille égale en Python?
OriginalL'auteur orokusaki | 2010-09-19
Vous devez vous connecter pour publier un commentaire.
Si vous savez que vous avez un peut être tranché de la séquence (liste ou un tuple),
Bien sûr, cela est un générateur, donc si vous avez absolument besoin d'une liste comme résultat, vous allez utiliser
list(getrows_byslice(seq, 3))
ou similaires, bien sûr.Si ce que vous commencez avec un générique itératif, la itertools recettes offrir de l'aide à la
grouper
recette...:(encore une fois, vous aurez besoin de demander
list
sur cette si la liste de ce que vous voulez, bien sûr).Puisque vous voulez vraiment le dernier tuple tronqué plutôt que rempli, vous aurez besoin de "couper" la fuite remplissez-les valeurs à partir de la dernière tuple.
bien sûr-mais ensuite j'ai commencé la lecture de la documentation (rappelez-vous que
grouper
fonction est cité dès la sortie de la docs!-).Aussi, je parle avec mon frère au téléphone au sujet de combien utile vous êtes à la communauté Python dans son ensemble. Nous avons tous deux se demandent, qu'est-ce que les lecteurs de votre enthousiasme à aider les autres? J'espère qu'un jour je peux être comme toi sur ce genre de choses, ou ce que je suis en train de faire dans l'avenir.
Je viens de tenter de "payer avant" quelques-uns des nombreux avantages de Python (et plus généralement de la programmation, et de manière plus générale encore des ordinateurs;-) apporté à ma vie; toujours heureux d'entendre que certains n'apprécient mes efforts et trouver utiles!
merci bien. Et, si vous n'êtes pas la conduite d'un jet d'hélicoptère de Google chaque jour, vous êtes certainement "payer avant" plus que de vous demander en retour.
OriginalL'auteur Alex Martelli
Cette version fonctionne avec n'importe quel (éventuellement paresseux et non-peut être tranché) itérable et produit un paresseux itérable (en d'autres termes, c'est un générateur qui fonctionne avec tous les types de séquences, y compris d'autres générateurs):
Quelques exemples:
OriginalL'auteur Michał Marczyk
La
grouper
fonction dans leitertools
docs est intelligent et concis; le seul problème est que vous pourriez avoir besoin de couper les résultats, comme Alex Martelli souligné. Je serais enclin à une solution le long de la lignes de Michał Marczyk de répondre, mais je ne vois pas pourquoi ça ne peut pas être rendue beaucoup plus simple. Cela fonctionne pour tous les cas, je peux le concevoir:OriginalL'auteur Aryeh Leib Taurog
Si vous êtes à la recherche pour le droit jusqu'à la compréhension de liste, ce sera de faire le travail:
OriginalL'auteur inspectorG4dget