ใน Python ฉันจะย้ายรายการไปยังดัชนีที่แน่นอนในรายการได้อย่างไร
ใน Python ฉันจะย้ายรายการไปยังดัชนีที่แน่นอนในรายการได้อย่างไร
คำตอบ:
ใช้insert
วิธีการของรายการ:
l = list(...)
l.insert(index, item)
หรือคุณสามารถใช้สัญกรณ์สไลซ์:
l[index:index] = [item]
หากคุณต้องการย้ายรายการที่มีอยู่แล้วในรายการไปยังตำแหน่งที่ระบุคุณจะต้องลบและแทรกในตำแหน่งใหม่:
l.insert(newindex, l.pop(oldindex))
last index + 1
โดยไม่มีข้อผิดพลาด องค์ประกอบจะถูกผนวกเข้ากับรายการในกรณีนั้น
a.insert(99999, 1)
In [14]: a
Out[14]: [...., 1]
วิธีแก้ปัญหาที่สั้นกว่าเล็กน้อยซึ่งจะย้ายรายการไปยังจุดสิ้นสุดเท่านั้นไม่ใช่ที่ใดก็ได้คือ:
l += [l.pop(0)]
ตัวอย่างเช่น:
>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]
l.append(l.pop(0))
คุณอาจรวมทั้งใช้ ยาวขึ้นเพียงเล็กน้อย แต่อ่านได้ง่ายกว่ามาก
หากคุณไม่ทราบตำแหน่งของรายการคุณอาจต้องหาดัชนีก่อน:
old_index = list1.index(item)
จากนั้นย้าย:
list1.insert(new_index, list1.pop(old_index))
หรือ IMHO วิธีที่สะอาดกว่า:
try:
list1.remove(item)
list1.insert(new_index, item)
except ValueError:
pass
pass
คำสั่ง ... ไม่เคยยกเว้นซ่อน - สิ่งที่เริ่มต้นในตัวอย่างเช่นนี้ควรจะให้คำสั่งที่ผิดพลาดทำความสะอาดหรือพิมพ์คำสั่ง ... หรือraise ValueError(f'Unable to move item to {new_index}')
print(f'Moving item to {new_index} failed. List remains unchanged.')
อาจpass
จะใช้ได้ถ้าอยู่ในฟังก์ชันที่เรียกว่าtry_to_move_item
หรือบางอย่างเพื่อให้เข้าใจว่าการดำเนินการอาจล้มเหลวอย่างเงียบ ๆ
วิธีแก้ปัญหาง่ายมาก แต่คุณต้องรู้ดัชนีของตำแหน่งเดิมและดัชนีของตำแหน่งใหม่:
list1[index1],list1[index2]=list1[index2],list1[index1]
ฉันรวบรวมวิธีการสองสามวิธีในการย้ายรายการภายในรายการเดียวกันด้วย timeit นี่คือสิ่งที่จะใช้ถ้า j> i:
┌──────────┬──────────────────────┐ │ 14.4usec │ x [i: i] = x.pop (ญ), │ │ 14.5usec │ x [i: i] = [x.pop (ญ)] │ │ 15.2usec │ x.insert (i, x.pop (j)) │ └──────────┴──────────────────────┘
และนี่คือสิ่งที่จะใช้ถ้า j <= i:
┌──────────┬───────────────────────────┐ │ 14.4usec │ x [i: i] = x [j],; เดล x [j] │ │ 14.4usec │ x [i: i] = [x [j]]; เดล x [j] │ │ 15.4usec │ x.insert (i, x [j]); เดล x [j] │ └──────────┴───────────────────────────┘
ไม่ใช่ความแตกต่างอย่างมากหากคุณใช้งานเพียงไม่กี่ครั้ง แต่ถ้าคุณทำของหนัก ๆ เช่นการจัดเรียงด้วยตนเองสิ่งสำคัญคือต้องดำเนินการให้เร็วที่สุด ไม่เช่นนั้นฉันขอแนะนำให้ใช้สิ่งที่คุณคิดว่าอ่านได้ง่ายที่สุด