รายการสั่งซื้อ

Sep 08 2020

ไม่มีใครรู้วิธีรับ 'list2' จาก 'list1'? ... ... เพราะฉันสับสน อัลกอริทึมจะใช้สำหรับรายการขนาดใหญ่มาก

list1 = {{1, 35, 3}, {1, 896, 1}, {2, 3, 999}, {1, 212, 5}, {1, 243, 1}, {3, 2, 88}, {1, 903, 3}, {35, 1, 9}, {1, 914, 1}, {1, 925, 2}, {896, 1, -6}};

list2={{{1, 35, 3}, {35, 1, 9}}, {{1, 896, 1}, {896, 1, -6}}, {{2, 3, 999}, {3, 2, 88}}, {1, 212,5}, {1, 243, 1}, {1, 903, 3}, {1, 914, 1}, {1, 925, 2}};

แน่นอนว่าคำสั่งไม่สำคัญ สิ่งที่สำคัญที่สุดคือองค์ประกอบ # 1 [[1]] == # 2 [[2]] || # 1 [[2]] == # 2 [[1]] อยู่ในรายการย่อยหนึ่งรายการ

คำตอบ

5 kglr Sep 08 2020 at 19:57
Gather[list1, #[[;;2]] == Reverse @  #2[[;;2]] &] /. {x_} :> x
{{{1, 35, 3}, {35, 1, 9}}, 
{{1, 896, 1}, {896, 1, -6}}, 
{{2, 3,  999}, {3, 2, 88}}, 
{1, 212, 5}, {1, 243, 1}, {1, 903, 3}, {1, 914, 1}, {1, 925, 2}}

ถ้ารายการป้อนข้อมูลเป็นรายการของอเนกประสงค์, คุณยังสามารถใช้ในสถานที่ของMost[#]#[[;; 2]] &

นอกจากนี้เรายังสามารถสร้างกราฟlist1โดยใช้RelationGraphและค้นหาConnectedComponentsเพื่อให้ได้การจัดกลุ่มเดียวกัน:

relation = #[[;; 2]] == Reverse @ #2[[;; 2]] &;

ConnectedComponents @ RelationGraph[relation, list1] /. {x_} :> x 
{{{2, 3, 999}, {3, 2, 88}},
 {{1, 896, 1}, {896, 1, -6}}, 
 {{1, 35,  3}, {35, 1, 9}}, 
 {1, 925, 2}, {1, 914, 1}, {1, 903, 3}, {1, 243, 1}, {1, 212, 5}}