Je ne sais pas comment atteindre l'index des tuples et les regrouper dans un seul tuple. Ma fonction reçoit une matrice 3x3, mon tab
et un entier qui correspond à l'index de la colonne de la matrice.
3 Réponses :
Pas sûr de ce qui vous bloque, c'est la même chose que l'indexation dans une liste de listes:
(1, 1, 1) (-1, 0, -1) (0, -1, 0)
def obtain_column(tab, c): return tuple(row[c] for row in tab) # take element at position c in each row, and make a tuple tab = ((1,-1,0), (1,0,-1), (1,-1,0)) print(obtain_column(tab, 0)) print(obtain_column(tab, 1)) print(obtain_column(tab, 2))
Merci pour votre réponse et votre temps! Cela m'aide beaucoup! En fait, un moyen simple de le faire. Faire de même pour les lignes de la matrice.
Cool, vous êtes les bienvenus. Pour les lignes, vous pouvez obtenir directement la ligne entière avec tab[r]
Vous pouvez faire quelque chose comme ceci:
ret = () for row in tab: ret += (row[c],) # the , is for adding the integer as a tuple element. return ret
Notez que le code ci-dessus suppose que chaque tuple a un élément dans l'index c. Vous devrez peut-être ajouter quelque chose pour vérifier cela, en fonction de votre programme complet.
Reportez-vous à la réponse de Reblochon Masque, c'est plus "python-y". Ceci est une démonstration du processus de création du nouveau tuple, au lieu d'utiliser un one-liner.
Ce que tu veux peut être fait
zip(*iterable)
bien connu zip(*iterable)
pour obtenir les colonnes de tab
comme les éléments de l'objet zip
,n
col
est le tuple, généré par zip(*tab)
correspondant à la colonne demandéecol
n'est pas la liste vide, nous pouvons retourner son élément unique - la colonne demandée sous forme de tuplen
, col
est la liste nulle, nous ne return
pas et nous devons donc lever une ValueError
, selon votre spécificationdonc
In [35]: def obtain_column(t, n): ...: col = [c for i, c in enumerate(zip(*tab), 1) if i==n] ...: if col : return col[0] ...: raise ValueError('obtain_column: invalid argument %d.'%n) ...: for i in (1,2,4): print(obtain_column(tab, i)) (1, 1, 1) (-1, 0, -1) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-35-1c03f33aa1cf> in <module> 3 if col : return col[0] 4 raise ValueError('obtain_column: invalid argument %d.'%n) ----> 5 for i in (1,2,4): print(obtain_column(tab, i)) <ipython-input-35-1c03f33aa1cf> in obtain_column(t, n) 2 col = [c for i, c in enumerate(zip(*tab), 1) if i==n] 3 if col : return col[0] ----> 4 raise ValueError('obtain_column: invalid argument %d.'%n) 5 for i in (1,2,4): print(obtain_column(tab, i)) ValueError: obtain_column: invalid argument 4. In [36]:
Question de niveau vraiment débutant, désolé mais SO n'est pas là pour résoudre le problème des devoirs, veuillez nous montrer votre approche pour résoudre ce problème particulier.
Je me demande si la partie sur la levée d'une exception
ValueError
est une partie fondamentale de vos exigences ... si j'essaie la réponse acceptée avecn=4
, comme dans votre spécification, alors je reçois un message d'erreur différent"IndexError: tuple index out of range"