【发布时间】:2012-01-30 01:45:36
【问题描述】:
我想遍历列表中除前几个元素之外的所有内容,例如:
for line in lines[2:]:
foo(line)
这很简洁,但会复制整个列表,这是不必要的。我可以这样做:
del lines[0:2]
for line in lines:
foo(line)
但这会修改列表,这并不总是好的。
我可以这样做:
for i in xrange(2, len(lines)):
line = lines[i]
foo(line)
但是,这太恶心了。
可能会更好:
for i,line in enumerate(lines):
if i < 2: continue
foo(line)
但它不像第一个例子那么明显。
那么:有什么方法可以做到与第一个示例一样明显,但又不会不必要地复制列表?
【问题讨论】:
-
我觉得
for i in xrange(2, len(lines)):很好。 -
我知道这并不能回答您的问题,但是对于仅 300 行文本,我完全不用担心复制。请记住,只有引用被复制,而不是字符串数据本身......
-
就我个人而言,我喜欢你提出的第 4 个例子。它的效率不亚于
islice方法,而且在我看来,其他任何查看您的代码的人都会更容易阅读和理解。 -
我也认为
for i in xrange(2, len(lines))很好,比以下任何选择都好。为什么你认为它“恶心”? -
@BlueRaja-DannyPflughoeft:因为 Python 式的迭代方式是使用
for-each循环:for x in stuff:。你不这样做for i in xrange(len(stuff)): x=stuff[i].. 那么如果你只是想做同样的迭代但略有不同,你为什么要这样做呢?