Python 3.x Python:使用包含索引值的列表拆分另一个列表

Python 3.x Python:使用包含索引值的列表拆分另一个列表,python-3.x,python,Python 3.x,Python,我有一个元组列表,表示形状的坐标——“点” 我还有一个索引值列表,用于标识该形状每个部分的起点(因为形状可以包含一个或多个“孤岛”)-“部分” 目前,要从点列表中提取零件的点,我需要执行以下操作: points = [ (0, 0), (1, 0), (2, 1), (3, 2), (0, 0), (4, 5), (5, 4), (3, 6), (2, 9), (4, 5), (2, 2), (3, 2), (6, 4), (4, 4), (8, 6), (4, 3),

我有一个元组列表,表示形状的坐标——“点”

我还有一个索引值列表,用于标识该形状每个部分的起点(因为形状可以包含一个或多个“孤岛”)-“部分”

目前,要从点列表中提取零件的点,我需要执行以下操作:

points = [
    (0, 0), (1, 0), (2, 1), (3, 2), (0, 0),
    (4, 5), (5, 4), (3, 6), (2, 9), (4, 5),
    (2, 2), (3, 2), (6, 4), (4, 4), (8, 6), (4, 3), (2, 2)
]

parts = [0, 5, 10]

for index, part in enumerate(parts):
    start = part

    try:
        end = parts[index + 1]
    except Exception:
        end = len(points)

    print(points[start:end])
然而,这对我来说并不是特别像蟒蛇。老实说,异常的使用让人感觉非常肮脏。有人能为这个特殊的问题提出一种改进的PythonV3方法吗

for i in range(len(parts)):
    if i==len(parts)-1:
        print(points[parts[i]:])
    else:
        print(points[parts[i]:parts[i+1]])
或:

或:

您要执行以下操作:

parts = [0, 5, 10, len(points)]
start_end_pairs = zip(parts[:-1], parts[1:])

for start, end in start_end_pairs:
    print(points[start:end])
解释 您的
部分
已经包含起始索引,因此您只需获取该数组的内容即可计算所需内容

[0,5,10]
开始,第一部分需要取
(0,5)
,第二部分需要取
(5,10)
,第三部分需要取
(10,len(points))
。创建这些对以在
打印
-循环中使用的过程可以很容易地用实现。我压缩了两个阵列:

[0, 5, 10]
[5, 10, len(points)]
产生

[(0, 5), (5, 10), (10, len(points))]

这正是你需要的。

StackOverflow上有一些非常聪明的人。谢谢,伊菲。很高兴能帮忙。如果你喜欢我上面使用的
zip
,试着参加一些函数式编程讲座/教程;这让我在过去成为了一名更好的程序员(这也是我第一次看到
zip
)。
[0, 5, 10]
[5, 10, len(points)]
[(0, 5), (5, 10), (10, len(points))]