101 votes

Python tranche le premier et le dernier élément de la liste

Existe-t-il un moyen de couper uniquement le premier et le dernier élément d'une liste ?

Par exemple : si c'est ma liste :

>>> some_list
['1', 'B', '3', 'D', '5', 'F']

I veulent pour ce faire (évidemment [0,-1] n'est pas une syntaxe valide) :

>>> first_item, last_item = some_list[0,-1]
>>> print first_item
'1'
>>> print last_item
'F'

Certaines choses que j'ai essayées :

In [3]: some_list[::-1]
Out[3]: ['F', '5', 'D', '3', 'B', '1']

In [4]: some_list[-1:1:-1]
Out[4]: ['F', '5', 'D', '3']

In [5]: some_list[0:-1:-1]
Out[5]: []
...

4voto

Brendan Metcalfe Points 487

Que pensez-vous de ça ?

some_list[:1] + some_list[-1:]

Result: ['1', 'F']

2voto

Vlox Points 407

Cas plus général : Retourner N points de chaque extrémité de la liste

Les réponses fonctionnent pour le premier et le dernier point spécifiques, mais certains, comme moi, peuvent être à la recherche d'une solution qui peut être appliquée à un cas plus général dans lequel vous pouvez retourner les N premiers points de chaque côté de la liste (disons que vous avez une liste triée et que vous voulez seulement les 5 points les plus élevés ou les plus bas), je suis venu avec la solution suivante :

In [1]
def GetWings(inlist,winglen):
    if len(inlist)<=winglen*2:
        outlist=inlist
    else:
        outlist=list(inlist[:winglen])
        outlist.extend(list(inlist[-winglen:]))
    return outlist

et un exemple pour retourner les 3 numéros inférieurs et supérieurs de la liste 1-10 :

In [2]
GetWings([1,2,3,4,5,6,7,8,9,10],3)

#Out[2]
#[1, 2, 3, 8, 9, 10]

0voto

Conor Points 1

Cela a marché pour moi :

some_list[0::-1]

0voto

ShadowRanger Points 44

Nouvelle approche amusante de la "mise en évidence" d'un cas anonyme. split de manière à ne pas le diviser deux fois, mais à faire tout le travail en une seule ligne, c'est d'utiliser l'opérateur du morse, := pour effectuer l'affectation sous forme d'expression en permettant les deux :

first, last = (split_str := a.split("-"))[0], split_str[-1]

et :

first, last = (split_str := a.split("-"))[::len(split_str)-1]

Attention, dans les deux cas, c'est exactement ce que l'on fait sur une seule ligne :

split_str = a.split("-")

puis en poursuivant avec l'un d'entre eux :

first, last = split_str[0], split_str[-1]
first, last = split_str[::len(split_str)-1]

y compris le fait que split_str persiste au-delà de la ligne sur laquelle il a été utilisé et consulté. Il s'agit simplement de répondre techniquement aux exigences de l'unicité de ligne, tout en étant assez laid. Je ne le recommanderais jamais sur déballage o itemgetter solutions même si la mise en ligne unique était obligatoire (ce qui exclut les versions nonwalrus qui indexent ou découpent explicitement une variable nommée et doivent se référer deux fois à cette variable nommée).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X