ไวยากรณ์ที่จะแทรกหนึ่งรายการในรายการอื่นในหลามคืออะไร?


197

รับสองรายการ:

x = [1,2,3]
y = [4,5,6]

ไวยากรณ์คืออะไร:

  1. แทรกxลงในแบบyที่yดูเหมือนตอนนี้[1, 2, 3, [4, 5, 6]]หรือไม่
  2. แทรกรายการทั้งหมดของxลงในแบบyที่yตอนนี้ดูเหมือนว่า[1, 2, 3, 4, 5, 6]?

ย้อนกลับ listB ดังนั้น [listA.insert (pos, x) สำหรับ x ใน [listB]]
John Mee

ดูเพิ่มเติมที่โพสต์นี้: stackoverflow.com/questions/5805892/…
Jos de Kloe

1
@JohnMee คุณหมายถึงlistA.insert(pos, x) for x in listB[::-1]อะไร
wizzwizz4

คำตอบ:


360

คุณหมายถึงappendอะไร

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x.append(y)
>>> x
[1, 2, 3, [4, 5, 6]]

หรือผสาน?

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x + y
[1, 2, 3, 4, 5, 6]
>>> x.extend(y)
>>> x
[1, 2, 3, 4, 5, 6] 

3
มันอยู่ในสถานที่หรือให้ผลผลิตอินสแตนซ์ใหม่หรือไม่?
Daniel Möller

7
x.extend(y)อยู่ในสถานที่x+yกำลังส่งคืนรายการใหม่ และx += yซึ่งไม่ได้กล่าวถึงที่นี่คล้ายกับการขยาย
Wim

86

คำถามไม่ชัดเจนว่าคุณต้องการบรรลุอะไร

รายการมีappendเมธอดซึ่งผนวกอาร์กิวเมนต์เข้ากับรายการ:

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.append(list_two)
>>> list_one
[1, 2, 3, [4, 5, 6]]

นอกจากนี้ยังมีextendวิธีการที่จะผนวกรายการจากรายการที่คุณส่งเป็นอาร์กิวเมนต์:

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.extend(list_two)
>>> list_one
[1, 2, 3, 4, 5, 6]

และแน่นอนว่ามีinsertวิธีการที่คล้ายกันappendแต่อนุญาตให้คุณระบุจุดแทรก:

>>> list_one.insert(2, list_two)
>>> list_one
[1, 2, [4, 5, 6], 3, 4, 5, 6]

หากต้องการขยายรายการที่จุดแทรกเฉพาะคุณสามารถใช้การแบ่งส่วนรายการ (ขอบคุณ @florisla):

>>> l = [1, 2, 3, 4, 5]
>>> l[2:2] = ['a', 'b', 'c']
>>> l
[1, 2, 'a', 'b', 'c', 3, 4, 5]

การแบ่งส่วนรายการค่อนข้างยืดหยุ่นเนื่องจากช่วยให้สามารถแทนที่ช่วงของรายการในรายการด้วยช่วงของรายการจากรายการอื่น:

>>> l = [1, 2, 3, 4, 5]
>>> l[2:4] = ['a', 'b', 'c'][1:3]
>>> l
[1, 2, 'b', 'c', 5]

34
หากคุณต้องการ 'ขยาย' ไปยังจุดแทรกเฉพาะคุณสามารถใช้ไวยากรณ์การแบ่งรายการ (ดูstackoverflow.com/a/7376026/1075152 )
florisla

5
ความคิดเห็นของ @ florisla ควรเป็นคำตอบที่ยอมรับได้ เป็นวิธีเดียวที่จะแทรกรายการลงในรายการอื่นที่ตำแหน่งโดยพลการ (ไม่ใช่ตอนท้าย)
ผู้ประกอบการ

1
@ weaver ในขณะที่มันเป็นทางออกเดียวที่จะทำเช่นนั้น (ขยายที่ดัชนีเฉพาะ) นั่นไม่ใช่คำถามเดิม
florisla

@florisla นั่นคืออวดรู้
ผู้ประกอบ


3

คุณยังสามารถทำ ...

x += y

นี่ควรเป็นความเห็นเกี่ยวกับคำตอบที่ได้รับการยอมรับเพราะสิ่งนั้นกล่าวถึงx + yและx += yเป็นสิ่งเดียวกัน แต่มีอยู่ในสถานที่
HTNW

ฉันไม่ได้มีชื่อเสียงที่จะทำเช่นนั้น แต่ถ้าคนอื่นสามารถ!
user3707850

2

ถ้าคุณต้องการที่จะเพิ่มองค์ประกอบในรายการ (list2) ที่ส่วนท้ายของรายการอื่น ๆ (รายการ) จากนั้นคุณสามารถใช้วิธีการขยายรายการ

list = [1, 2, 3]
list2 = [4, 5, 6]
list.extend(list2)
print list
[1, 2, 3, 4, 5, 6]

หรือถ้าคุณต้องการเชื่อมสองรายการเข้าด้วยกันคุณสามารถใช้เครื่องหมาย +

list3 = list + list2
print list3
[1, 2, 3, 4, 5, 6]

0

หากเราทำเช่นx.append(y)นั้น y จะได้รับการอ้างอิงเป็น x เช่นนั้นการเปลี่ยนแปลงใด ๆ ที่ทำกับ y จะส่งผลต่อการผนวก x เช่นกัน ดังนั้นหากเราต้องการแทรกเฉพาะองค์ประกอบเราควรทำดังต่อไปนี้:

x = [1,2,3] y = [4,5,6] x.append(y[:])

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.