J'ai une liste comme celle-ci:
for item in list:
reqs = reqs + item[1]
b.append(item[0])
c = set(b)
7 Réponses :
Aplatigez un niveau, vous pouvez utiliser itheroTools.chain.from_iterable () code>:
@Marcin: Vous avez raison, c'est comme ça que cela a été appelé in numy. :)
Preuve, comme si la preuve était nécessaire, ce nombre est mauvais pour vous;)
Si vous voulez simplement aplatir la liste, utilisez simplement itheroTools.chain.from_iterable code>: http://docs.python.org/library/itétools.html#itertools.chain.from_iterable P>
Essayez ceci:
from itertools import chain
c = set()
reqs = 0
for vid, number in chain(*your_list):
c.add(vid)
reqs += number
extraire tous les tuples d'une structure de données ... peut-être ... p> p>
Que se passe-t-il si j'appelle get_tups ([('foo',)]) code>?
Étant donné que l'entrée contient 1 tuple, vous obtiendrez une liste contenant le 1 tuple. En d'autres termes, la sortie sera la même que l'entrée;)
Et puis, que se passe-t-il si je l'appelle une seconde fois? Voici un indice: ideone.com/zgmzq
ahh. Pourquoi Z n'est-il pas une liste vide la deuxième fois qu'elle est appelée?
Parce que vous appendez une valeur à celle-ci dans votre code et que l'expression z = [] code> est évaluée dans le cadre de la déclaration def code>.
get_tups ([('foo',)]] get_tups ([("foo ',)]]) .. à la ligne 2, je n'assite aucune variable pour z. Par conséquent, je m'attendrais à ce qu'il assume []
C'est votre travail de dire à l'ordinateur quoi faire, sans espoir que cela fait des hypothèses.
Laissez-moi reformuler. Je m'attendrais à ce qu'il soit par défaut [], puisque le paramètre est un paramètre par défaut et n'est pas transmis dans la méthode. Il semble "rappeler" la valeur précédente de z. comme c'est un global ou quelque chose. Je pensais que la portée de Z était dans la méthode elle-même. Par conséquent, la deuxième fois, elle a été appelée, elle réinitialiserait []. désolé si je suis stupide
J'ai déjà expliqué pourquoi cela se produit: z = [] code> est évalué dans le cadre de la déclaration def code>. Incidemment, votre fonction ne fait pas non plus face à une entrée circulaire: ideone.com/yOaps
Pour complétude, j'ai corrigé le code - Ideone.com/o8po6 . merci pour votre aide @marcin
Impressionnant. Vous pouvez éditer votre réponse - c'est certainement encouragé.
Voici un autre (pas de bibliothèques):
Pourquoi créez-vous une fonction nommée au lieu d'une Lambda?
Juste pour la clarté, pas de raison particulière.
Il existe un moyen très simple de le faire avec des compréhensions de la liste. Cet exemple a été documenté dans la documentation Python ici
In [59]: your_list = [[('video1',4)], [('video2',5),('video3',8)], [('video1',5)], [('video5', 7), ('video6',9)]]
In [60]: improved_list = [num for elem in your_list for num in elem]
In [61]: improved_list
Out[61]:
[('video1', 4),
('video2', 5),
('video3', 8),
('video1', 5),
('video5', 7),
('video6', 9)]
Si cette liste est Cela fonctionne en raison du fait que la somme accomplit simplement les listes et l'ajout de listes d'option fonctionne dans Python comme prévu :) p>
Avez-vous besoin du
... code> dans l'exemple liste? Ce serait un exemple de travail sans elle.Que voulez-vous réellement atteindre à la fin? Un ensemble
C code> devideox code> variables et la somme des autres numéros que vous avez énumérées?@jamylak no, ...... signifie qu'il y a beaucoup de données plus similaires que je ne dois pas tous les énumérer
@Shep Oui, cette liste contient de nombreux données, pas seulement ceux que j'ai énumérés ici, mais essentiellement c'est ce que je veux faire