Подтвердить что ты не робот

Pythonic способ разбить список на первый и отдохнуть?

Я думаю, что в Python 3 я смогу сделать:

first, *rest = l

что я и хочу, но я использую 2.6. Пока я делаю:

first = l[0]
rest = l[1:]

Это прекрасно, но мне просто интересно, есть ли что-то более элегантное.

4b9b3361

Ответ 1

first, rest = l[0], l[1:]

В принципе то же самое, за исключением того, что это oneliner. Корреспондентские породы.

Это немного длиннее и менее очевидно, но обобщается для всех повторений (вместо ограничения на sliceables):

i = iter(l)
first = next(i) # i.next() in older versions
rest = list(i)

Ответ 2

Вы можете сделать

first = l.pop(0)

а затем l будет остальным. Он изменяет ваш первоначальный список, хотя, возможно, это не то, что вы хотите.

Ответ 3

Еще один, работающий с Python 2.7. Просто используйте промежуточную функцию. Логично, что новое поведение имитирует то, что произошло с передачей параметров функций.

li = [1, 2, 3]
first, rest = (lambda x, *y: (x, y))(*li)

Ответ 4

Я бы предложил:

first, remainder = l.split(None, maxsplit=1)