Я думаю, что в Python 3 я смогу сделать:
first, *rest = l
это именно то, что я хочу, но я использую 2.6. Пока делаю:
first = l[0]
rest = l[1:]
Это хорошо, но мне просто интересно, есть ли что-то более элегантное.
Я думаю, что в Python 3 я смогу сделать:
first, *rest = l
это именно то, что я хочу, но я использую 2.6. Пока делаю:
first = l[0]
rest = l[1:]
Это хорошо, но мне просто интересно, есть ли что-то более элегантное.
first, rest = l[0], l[1:]
В основном то же самое, за исключением того, что это oneliner. Кортеж присвоения породы.
Это немного длиннее и менее очевидно, но обобщено для всех итераций (вместо того, чтобы ограничиваться срезами):
i = iter(l)
first = next(i) # i.next() in older versions
rest = list(i)
first, last = l[:1], l[1:]
в случае, если l
пусто (и это красивее ;).
- person Don O'Donnell; 19.08.2010
l[:1]
— это список, l[0]
— это элемент списка.
- person Don O'Donnell; 19.08.2010
Ты можешь сделать
first = l.pop(0)
и тогда l
будет остальным. Однако он изменяет ваш исходный список, поэтому, возможно, это не то, что вам нужно.
x = []; x.pop(0) Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: pop from empty list
- person avyfain; 19.07.2017
first, *rest = []
вызвать ValueError.
- person kriss; 04.04.2019
Я бы предложил:
first, remainder = l.split(None, maxsplit=1)
list
не имеет метода .split()
.
- person All Workers Are Essential; 08.07.2016
Еще один, работающий с python 2.7. Просто используйте промежуточную функцию. Логично, поскольку новое поведение имитирует то, что произошло при передаче параметров функций.
li = [1, 2, 3]
first, rest = (lambda x, *y: (x, y))(*li)
first, rest = l[0], l[1:]
. - person Katriel   schedule 18.08.2010