给定一个列表,我想将一组操作应用于列表的子集(切片),并将每个转换的结果存储在原始列表中。
我的背景是在Ada,这导致我犯了以下错误:
Number_List = [0,1,2,3,4,5,6,7,8,9]
for Index, Number in enumerate(Number_List[1:]):
Number_List[Index] = Number + 1
给出一个新的Number_List:2,3,4,5,6,7,8,9,10,9并告诉我一个数组的片被重新索引为0.
我已经转移到以下,这很麻烦但功能齐全。
Number_List = [0,1,2,3,4,5,6,7,8,9]
for Index in range(1,len(Number_List))
Number_List[Index] = Number_List[Index]+1
我正在寻找一种更优雅的方式来做到这一点。
答案 0 :(得分:8)
enumerate
需要start
参数:
Number_List = [0,1,2,3,4,5,6,7,8,9]
for Index, Number in enumerate(Number_List[1:], start=1):
Number_List[Index] = Number + 1
你也可以写
Number_List[1:] = [x+1 for x in Number_List[1:]]
答案 1 :(得分:1)
from itertools import islice
number_list[start:stop] = (x + 1 for x in islice(number_list, start, stop))
或者,使用number_list[start:stop]
代替islice
,但这会不必要地创建另一个切片。这可以通过切片分配以任意方式更新列表,并避免显式循环。
答案 2 :(得分:1)
您可以使用列表推导和切片效果很好:
vals = range(10) #gives your example numbers
vals[1:] = [v + 1 for v in vals[1:]]