这是:
for i,v in enumerate(lst[from:to]):
或者这个:
for i,v in enumerate(itertools.islice(lst,from,to)):
...制作迭代子列表的副本?
答案 0 :(得分:2)
假设lst
是常规Python列表,而不是Numpy数组,Pandas数据帧或某些支持切片索引的自定义类,那么切片[...:...]
将创建一个新列表,而{{ 3}}没有。
正如评论中所建议的那样,您可以通过创建enumerate
个对象并在使用之前修改原始列表来自行查看:
>>> lst = [1, 2, 3, 4, 5]
>>> e1 = enumerate(lst[1:4])
>>> e2 = enumerate(itertools.islice(lst, 1, 4))
>>> del lst[2] # remove second element
>>> list(e1)
[(0, 2), (1, 3), (2, 4)] # shows content of original list
>>> list(e2)
[(0, 2), (1, 4), (2, 5)] # second element skipped
另请注意,这确实与itertools.islice
无关,enumerate
将在两种情况下创建生成器(在切片之前创建的任何可迭代之上)。
您还可以创建切片的两个变体并检查其类型:
>>> type(lst[1:4])
list # a new list
>>> type(itertools.islice(lst, 1, 4))
itertools.islice # some sort of generator