J'essaye de trouver first_row = [1, 2, 3, 4, ...]

Actuellement, j'ai list = [[1, a], [2, b], [3, c], [4, d], ...]

Et a essayé d'exécuter: list[:, 0]

Erreur de sortie: TypeError: List indices must be integer must be integer, not tuple

2
Archit Garg 29 oct. 2020 à 20:22

3 réponses

Meilleure réponse

L'indice lst[:,0] ne fait pas ce que vous pensez qu'il fait. Vous pourriez être habitué à pandas ou à d'autres bibliothèques prenant en charge l'indexation dans des matrices multidimensionnelles, mais le list intégré ne le prend pas en charge.

Au lieu de cela, vous devriez utiliser une liste-compréhension.

first_row = [column[0] for column in lst]

Il s'agit d'un raccourci pour l'expression plus détaillée suivante.

first_row = []
for column in lst:
    first_row.append(lst[0])

En d'autres termes, vous ne pouvez pas vectoriser la multi-indexation avec le type list. Vous devez récupérer chaque colonne une par une et le premier élément de chacune d'elles indépendamment.

En guise de remarque, évitez de vous appeler des variables list car cela masque la fonction intégrée du même nom.

2
Olivier Melançon 29 oct. 2020 à 17:34

list ne prend pas en charge plusieurs index (c'est-à-dire "séparés par des virgules"), vous avez donc besoin de quelque chose comme

[sublist[0] for sublist in list]

L'alternative la plus populaire prenant en charge l'indexation multiple comme vous l'avez essayée est de numpy tableau multidimensionnel

La raison pour laquelle list ne peut pas faire cela est parce que c'est un conteneur général, donc cela ne peut pas impliquer ce que vous stockez à l'intérieur. Vous pourriez avoir

values = [[1, 2], 'three', MyClass(4, 5, 6), None]

Appliquer [0, :] à cela n'aurait aucun sens, de la même manière que dans la plupart des cas.

2
Andrew Lyashko 29 oct. 2020 à 18:05
first_row = [i[0] for i in list]

Edit: Puisqu'il y a déjà deux réponses comme celle-ci, permettez-moi d'en montrer une différente si vous souhaitez utiliser le découpage. Tout d'abord, vous NE DEVEZ PAS utiliser list comme nom de votre variable, car list est un mot réservé en python. Supposons que votre liste s'appelle list1, vous pouvez faire:

first_row = list(np.array(list1)[0,:].astype(int))
1
Sergio González 29 oct. 2020 à 17:38