web-dev-qa-db-fra.com

découper une liste de listes en Python

Je dois découper une liste de listes en python. 

A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
idx = slice(0,4)
B = A[:][idx]

Le code ci-dessus ne me donne pas le bon résultat.

Ce que je veux, c'est: [[1,2,3],[1,2,3],[1,2,3]]

7
user1050648

Avec numpy c'est très simple - vous pouvez simplement effectuer la tranche:

In [1]: import numpy as np

In [2]: A = np.array([[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]])

In [3]: A[:,:3]
Out[3]: 
array([[1, 2, 3],
       [1, 2, 3],
       [1, 2, 3]])

Vous pouvez, bien entendu, transformer le numpy.array en list:

In [4]: A[:,:3].tolist()
Out[4]: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
11
awesoon

Très rarement, utiliser des objets slice est plus facile à lire que d’utiliser une liste de compréhension, et ce n’est pas l’un de ces cas.

>>> A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
>>> [sublist[:3] for sublist in A]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

C'est très clair. Pour chaque sous-liste de A, donnez-moi la liste des quatre premiers éléments.

10
timgeb

vous pouvez utiliser une compréhension de liste telle que: [x[0:i] for x in A]i est 1,2,3 etc. en fonction du nombre d'éléments dont vous avez besoin.

1
Sid
A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]

print [a[:3] for a in A]

Utilisation de la compréhension de liste 

0
Rahul Kumar

Non plus:

>>> [a[slice(0,3)] for a in A]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

Ou:

>>> [list(filter(lambda x: x<=3, a)) for a in A]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
0
Haifeng Zhang