在python中使用给定索引列表迭代列表

在python中使用给定索引列表迭代列表,python,list,loops,Python,List,Loops,我有一个列表a=[-1,2,1,2,0,2,1,-3,4,3,0,-1]和B=[0,7,11]。列表B显示负整数索引的索引 如何返回列表中每个片段的总和:例如A[0+1:7]和A[7+1:11]使用,可以将[0,7,11]转换为所需的片段索引对(1:7/8:11): 更新 无需定义B即可实现所需功能的另一种方法是: 键函数用于分割0、正数和负数。使用,您可以将[0,7,11]转换为所需的切片索引对(1:7/8:11): 更新 无需定义B即可实现所需功能的另一种方法是: 键函数用于分割0、正数

我有一个列表
a=[-1,2,1,2,0,2,1,-3,4,3,0,-1]
B=[0,7,11]
。列表
B
显示负整数索引的索引

如何返回列表中每个片段的总和:例如
A[0+1:7]
A[7+1:11]
使用,可以将
[0,7,11]
转换为所需的片段索引对(
1:7
/
8:11
):


更新

无需定义
B
即可实现所需功能的另一种方法是:

函数用于分割0、正数和负数。

使用,您可以将
[0,7,11]
转换为所需的切片索引对(
1:7
/
8:11
):


更新

无需定义
B
即可实现所需功能的另一种方法是:


函数用于分割0、正数和负数。

您可以像使用单行列表一样实现

[sum(A[i+1:B[B.index(i)+1]]) if i != B[-1] else sum(A[i+1:-1]) for i in B]
结果

[8, 7, 0]
[8, 7]
如果您不想要最后一个切片和,请使用此选项

[sum(A[i+1:B[B.index(i)+1]]) for i in B if i != B[-1]]
结果

[8, 7, 0]
[8, 7]

您可以像使用单行列表理解一样实现

[sum(A[i+1:B[B.index(i)+1]]) if i != B[-1] else sum(A[i+1:-1]) for i in B]
结果

[8, 7, 0]
[8, 7]
如果您不想要最后一个切片和,请使用此选项

[sum(A[i+1:B[B.index(i)+1]]) for i in B if i != B[-1]]
结果

[8, 7, 0]
[8, 7]

谢谢你的回答。它可以工作,但是如果A=[-8,3,0,5,-3,12]和B=[0,4]不返回12?@KevinOelen,
A[0+1:4]=[3,0,5]
@KevinOelen,如果你想得到
[12]
,你需要指定
B=[4,6]
B=[0,4,6]
@KevinOelen,在答案中运行代码之前运行这个命令来处理这种情况:
If[-B]
@KevinOelen,我更新了答案,加入了不需要你自己定义
B
(负数索引)的其他版本。谢谢你的回答。它可以工作,但是如果A=[-8,3,0,5,-3,12]和B=[0,4]不返回12?@KevinOelen,
A[0+1:4]=[3,0,5]
@KevinOelen,如果你想得到
[12]
,你需要指定
B=[4,6]
B=[0,4,6]
@KevinOelen,在答案中运行代码之前运行这个命令来处理这种情况:
If[-B]
@KevinOelen,我更新了答案,加入了不需要你自己定义
B
(负数索引)的其他版本。谢谢你的回答。你能看到上面的注释和答案吗?它应该返回12,因为-3
a[0+1:4]=[3,0,5]
后面有一个正整数?对吧?谢谢你的回答。你能看到上面的注释和答案吗?它应该返回12,因为-3
a[0+1:4]=[3,0,5]
后面有一个正整数?正确的?