62

我认为在 Python 3 中我可以做到:

first, *rest = l

这正是我想要的,但我使用的是 2.6。现在我正在做:

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

这很好,但我只是想知道是否有更优雅的东西。

4

4 回答 4

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

基本上是一样的,只是它是一个单线器。元组分配岩石。

这有点长且不太明显,但适用于所有可迭代对象(而不是仅限于可切片对象):

i = iter(l)
first = next(i) # i.next() in older versions
rest = list(i)
于 2010-08-18T15:53:31.307 回答
21

你可以做

first = l.pop(0)

然后l将是其余的。但是,它会修改您的原始列表,因此可能不是您想要的。

于 2010-08-18T16:06:02.853 回答
1

如果lstring类型我会建议:

first, remainder = l.split(None, maxsplit=1)
于 2016-07-08T14:12:50.260 回答
0

还有一个,使用 python 2.7。只需使用中间函数。合乎逻辑,因为新行为模仿了函数参数传递所发生的情况。

li = [1, 2, 3]
first, rest = (lambda x, *y: (x, y))(*li)
于 2019-04-04T12:29:36.297 回答