Python:排序列表列表

时间:2017-11-05 07:05:15

标签: python algorithm list sorting

我有一个列表,看起来像这样:

testList = 
[[(480.0, 349.0), (459.0, 354.0), (467.0, 343.0)] 
[(467.0, 343.0), (455.0, 344.0), (462.0, 334.0)] 
[(459.0, 354.0), (480.0, 349.0), (483.0, 366.0)] ...]

每个列表代表我尝试用线条绘制的三角形。我有一个不相关的绘图方法,绘制从第一个顶点到第二个到第三个并返回到第一个顶点的线(从而绘制一个三角形)。我也希望将这些三角形连接在一起而不绘制新行,因此我想连续对testList [i] [0]进行排序。

所以,我想重新排列列表中的顶点AND testList,如下所示:

testList = 
[[(480.0, 349.0), (459.0, 354.0), (467.0, 343.0)] 
[(480.0, 349.0), (459.0, 354.0),  (483.0, 366.0)] 
[(467.0, 343.0), (455.0, 344.0), (462.0, 334.0)]...]

其中testList[2]跳至testList[1]testList[1][0]testList[1][1]切换。

感谢Alfonso Jiménez,这是我到目前为止采用的方法:

for subList in testList1:
    subList.sort()
testList1.sort()

效果很好,除了我仍然注意到完整的testList部分,如:

...[(215.0, 737.0), (298.0, 633.0), (317.0, 660.0)]
[(317.0, 660.0), (333.0, 599.0), (394.0, 660.0)]
[(298.0, 633.0), (317.0, 660.0), (333.0, 599.0)]
[(282.0, 75.0), (316.0, 74.0), (336.0, 71.0)]...

可以重新排列以具有相同的testList [i] [0s]但不要注意(317.0,660.0)顶点不移动到位置[0]。您可能会看到完整输出{{3} }

我是python的初学者,所以任何帮助都会非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

你的问题有点混乱,这就是你想要的:

我尝试了递归方法,它会从你的列表中删除并重新排序3-3项:

testList = [[(480.0, 349.0), (459.0, 354.0), (467.0, 343.0)],
[(467.0, 343.0), (455.0, 344.0), (462.0, 334.0)],
[(459.0, 354.0), (480.0, 349.0), (483.0, 366.0)]]
def  triangles(test_line):
    updated_list=[]
    if not test_line:
        return 0
    else:

        for index,item in enumerate(test_line[:3]):
            if index==0:
                updated_list.insert(index,test_line[index])
            if index==1:


                updated_list.insert(2,test_line[index])
            if index==2:
                test_line[index][0], test_line[index][1] = test_line[index][1], test_line[index][0]

                updated_list.insert(1,test_line[index])


        print(updated_list)
        return triangles(test_line[3:])

print(triangles(testList))

输出:

[[(480.0, 349.0), (459.0, 354.0), (467.0, 343.0)], [(480.0, 349.0), (459.0, 354.0), (483.0, 366.0)], [(467.0, 343.0), (455.0, 344.0), (462.0, 334.0)]]
  

使用更新的长列表进行测试用例:

testList = [[(480.0, 349.0), (459.0, 354.0), (467.0, 343.0)],
[(467.0, 343.0), (455.0, 344.0), (462.0, 334.0)],
[(459.0, 354.0), (480.0, 349.0), (483.0, 366.0)],
[(215.0, 737.0), (298.0, 633.0), (317.0, 660.0)],
[(317.0, 660.0), (333.0, 599.0), (394.0, 660.0)],
[(298.0, 633.0), (317.0, 660.0), (333.0, 599.0)]]

输出:

[[(480.0, 349.0), (459.0, 354.0), (467.0, 343.0)], [(480.0, 349.0), (459.0, 354.0), (483.0, 366.0)], [(467.0, 343.0), (455.0, 344.0), (462.0, 334.0)]]
[[(215.0, 737.0), (298.0, 633.0), (317.0, 660.0)], [(317.0, 660.0), (298.0, 633.0), (333.0, 599.0)], [(317.0, 660.0), (333.0, 599.0), (394.0, 660.0)]]