我需要在使用for
时忽略列表的最后一个元素,而不创建任何其他列表或修改进程上的主列表。
并且不忽略最后一个元素,如果它在任何其他位置重复而不是最后一个元素。所以,只能忽略它的立场。
在这里我忽略了它,但我必须创建一个额外的列表:
list1 = [3,2,3] list1_without_last = list1
list1_without_last.remove(list1_without_last[len(list1_without_last)-1])
for i in list1_without_last :
#do something
我需要这样的东西:
list1 = [3,2,3] for i in list1 except_list1_last_element:
例1:list3 = [4,5,4,5]输出:[4,5,4]
例2:list4 = [1,2,3,4]输出:[1,2,3]
规范的方法是使用range
通过索引访问项目。将索引与列表长度进行比较是检查它是最后一个元素的最简单方法。
for i in range(len(some_list) - 1):
item = some_list[i]
不支持len
或索引的迭代器的另一种方法是使用itertools.tee
保持迭代器的前瞻副本,并在前瞻到达结束时停止原始操作符的迭代。这也具有直接推广以丢弃最后的n
元素的优点。
from itertools import tee, islice
def drop_last(it, n=1):
it, lookahead = tee(iter(it))
next(islice(lookahead, n, n), None)
for _ in lookahead:
yield next(it)
for x in drop_last([1, 2, 3]):
print(x)
# output:
# 1
# 2
这个怎么样?
list1 = [3, 2, 3]
for i in list1[:-1]:
print(i)
如果没有创建任何中间副本是一个很难的要求,你可以使用itertools.islice
:
import itertools
list1 = [3, 2, 3]
for i in itertools.islice(list1, len(list1) - 1)):
print(i)