2010-08-18 77 views
38

我想在Python 3我就可以做到:Pythonic的方式将列表分为第一个和休息?

first, *rest = l 

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

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

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

+6

我觉得上面的罚款。你总是可以先做'rest = l [0],l [1:]'。 – katrielalex 2010-08-18 15:52:33

+4

事实上,你无法改进上述 - http://www.python.org/dev/peps/pep-3132/。 – katrielalex 2010-08-18 15:56:19

+1

相关:https://stackoverflow.com/questions/10532473/python-head-and-tail-in-one-line – 2016-03-01 20:37:35

回答

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

基本上是一样的,除了它是一个oneliner。 Tuple assigment岩石。

这是一个有点长,不太明显,但广义所有iterables(而不是被限制在sliceables):

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

更好的是:'first,last = l [:1],l [1:]'in情况'l'是空的(它更漂亮;)。 – 2010-08-18 21:26:04

+4

应该提到这些在语义上不相同:'l [:1]'是一个列表,'l [0]'是列表的一个元素。 – 2010-08-18 22:11:14

12

你可以做

first = l.pop(0) 

然后l将是休息。不过,它会修改你的原始列表,所以也许它不是你想要的。

+2

嘿!我不知道你可以提供一个流行指数。这是不寻常的,但方便!我想知道为什么列表中没有移位方法。谢谢! – Shawn 2010-08-18 16:27:23

+0

这不适用于空列表: '''x = []; x.pop(0) 回溯(最近最后一次通话): 文件 “”,1号线,在 IndexError:从空列表弹出 '''' – avyfain 2017-07-19 01:01:34

-2

我建议:

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

list'没有'.split() '方法。 – cpburnz 2016-07-08 19:08:49

+0

ooops!我的错误,虽然它是一个字符串 – FGH 2016-07-10 11:23:29

相关问题