ความแตกต่างระหว่างวิธีรายการappend()
กับextend()
อะไร
ความแตกต่างระหว่างวิธีรายการappend()
กับextend()
อะไร
คำตอบ:
append
: ผนวกวัตถุในตอนท้าย
x = [1, 2, 3]
x.append([4, 5])
print (x)
ให้คุณ: [1, 2, 3, [4, 5]]
extend
: ขยายรายการโดยการต่อท้ายองค์ประกอบจาก iterable
x = [1, 2, 3]
x.extend([4, 5])
print (x)
ให้คุณ: [1, 2, 3, 4, 5]
x + [4, 5]
ช่วยให้คุณมีรายการใหม่ที่กำหนดให้กับ x - x.extend()
กลายพันธุ์รายการเดิม ฉันทำอย่างละเอียดในคำตอบของฉันที่นี่ด้านล่าง
x += [4,5]
แต่มันก็เป็นเช่นเดียวกับ
append
เป็นวัตถุ หากคุณพยายามที่จะใช้extend
และคุณผ่านพจนานุกรมมันจะผนวกคีย์และไม่แฮชทั้งหมดจนถึงส่วนท้ายของอาร์เรย์
append
เพิ่มองค์ประกอบให้กับรายการและextend
เชื่อมโยงรายการแรกกับรายการอื่น (หรือทำซ้ำได้อีกรายการหนึ่งโดยไม่จำเป็นต้องเป็นรายการ)
>>> li = ['a', 'b', 'mpilgrim', 'z', 'example']
>>> li
['a', 'b', 'mpilgrim', 'z', 'example']
>>> li.append("new")
>>> li
['a', 'b', 'mpilgrim', 'z', 'example', 'new']
>>> li.append(["new", 2])
>>> li
['a', 'b', 'mpilgrim', 'z', 'example', 'new', ['new', 2]]
>>> li.insert(2, "new")
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', ['new', 2]]
>>> li.extend(["two", "elements"])
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', ['new', 2], 'two', 'elements']
ความแตกต่างระหว่างวิธีการรายการต่อท้ายและขยายคืออะไร?
append
เพิ่มอาร์กิวเมนต์เป็นองค์ประกอบเดียวในตอนท้ายของรายการ ความยาวของรายการจะเพิ่มขึ้นทีละรายการextend
วนซ้ำของอาร์กิวเมนต์เพิ่มแต่ละองค์ประกอบลงในรายการขยายรายการ ความยาวของรายการจะเพิ่มขึ้นตามองค์ประกอบหลายอย่าง แต่อยู่ในการโต้แย้งที่ทำซ้ำได้append
list.append
วิธีการผนวกวัตถุไปยังจุดสิ้นสุดของรายการ
my_list.append(object)
ไม่ว่าจะเป็นวัตถุอะไรไม่ว่าจะเป็นตัวเลขสตริงรายการอื่นหรืออะไรก็ตามมันก็จะถูกเพิ่มเข้าไปที่ส่วนท้ายของmy_list
รายการเดียวในรายการ
>>> my_list
['foo', 'bar']
>>> my_list.append('baz')
>>> my_list
['foo', 'bar', 'baz']
ดังนั้นโปรดจำไว้ว่ารายการนั้นเป็นวัตถุ หากคุณต่อท้ายรายการอื่นลงในรายการรายการแรกจะเป็นวัตถุชิ้นเดียวในตอนท้ายของรายการ (ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ):
>>> another_list = [1, 2, 3]
>>> my_list.append(another_list)
>>> my_list
['foo', 'bar', 'baz', [1, 2, 3]]
#^^^^^^^^^--- single item at the end of the list.
extend
list.extend
วิธีการขยายรายการโดยการผนวกองค์ประกอบจาก iterable นี้:
my_list.extend(iterable)
ดังนั้นเมื่อขยายองค์ประกอบแต่ละส่วนของ iterable จะถูกผนวกเข้ากับรายการ ตัวอย่างเช่น:
>>> my_list
['foo', 'bar']
>>> another_list = [1, 2, 3]
>>> my_list.extend(another_list)
>>> my_list
['foo', 'bar', 1, 2, 3]
โปรดจำไว้ว่าสตริงเป็นตัววนซ้ำได้ดังนั้นหากคุณขยายรายการด้วยสตริงคุณจะต่อท้ายอักขระแต่ละตัวเมื่อคุณวนซ้ำสตริง (ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ):
>>> my_list.extend('baz')
>>> my_list
['foo', 'bar', 1, 2, 3, 'b', 'a', 'z']
__add__
( +
) และ__iadd__
( +=
)ทั้งสอง+
และผู้ประกอบการที่มีการกำหนดไว้สำหรับ+=
list
พวกมันมีความหมายคล้ายกันที่จะขยาย
my_list + another_list
สร้างรายการที่สามในหน่วยความจำเพื่อให้คุณสามารถส่งคืนผลลัพธ์ได้ แต่ต้องการให้รายการที่สองที่สามารถทำซ้ำได้นั้นเป็นรายการ
my_list += another_list
ปรับเปลี่ยนรายการในสถานที่ (มันเป็นผู้ประกอบการในสถานที่และรายการที่เป็นวัตถุที่ไม่แน่นอนตามที่เราเห็น) จึงไม่สร้างรายการใหม่ นอกจากนี้ยังใช้งานได้เหมือนขยายซึ่งการทำซ้ำที่สองสามารถทำซ้ำได้ทุกชนิด
อย่าสับสน - my_list = my_list + another_list
ไม่เท่ากับ+=
- ให้รายชื่อใหม่ที่กำหนดให้กับ my_list
ผนวกมีความซับซ้อนของเวลาคงที่ O (1)
ส่วนขยายมีความซับซ้อนของเวลา O (k)
การวนซ้ำผ่านการเรียกหลายครั้งเพื่อappend
เพิ่มความซับซ้อนทำให้เทียบเท่ากับการขยายและเนื่องจากการวนซ้ำของการขยายจะถูกใช้ใน C มันจะเร็วขึ้นเสมอหากคุณต้องการผนวกรายการต่อเนื่องจากรายการที่สามารถทำซ้ำได้
คุณอาจสงสัยว่าสิ่งใดมีประสิทธิภาพมากกว่าเนื่องจากสามารถใช้ผนวกเพื่อให้ได้ผลลัพธ์เช่นเดียวกับการขยาย ฟังก์ชั่นต่อไปนี้ทำสิ่งเดียวกัน:
def append(alist, iterable):
for item in iterable:
alist.append(item)
def extend(alist, iterable):
alist.extend(iterable)
ดังนั้นขอเวลาพวกเขา:
import timeit
>>> min(timeit.repeat(lambda: append([], "abcdefghijklmnopqrstuvwxyz")))
2.867846965789795
>>> min(timeit.repeat(lambda: extend([], "abcdefghijklmnopqrstuvwxyz")))
0.8060121536254883
ผู้วิจารณ์พูดว่า:
คำตอบที่สมบูรณ์แบบฉันเพิ่งพลาดช่วงเวลาของการเปรียบเทียบการเพิ่มองค์ประกอบเดียวเท่านั้น
ทำสิ่งที่ถูกต้องทางความหมาย หากคุณต้องการที่จะผนวกองค์ประกอบทั้งหมดใน iterable extend
ใช้ append
หากคุณเพียงแค่เพิ่มองค์ประกอบหนึ่งในการใช้งาน
ตกลงดังนั้นเรามาสร้างการทดสอบเพื่อดูว่ามันทำงานอย่างไรในเวลา:
def append_one(a_list, element):
a_list.append(element)
def extend_one(a_list, element):
"""creating a new list is semantically the most direct
way to create an iterable to give to extend"""
a_list.extend([element])
import timeit
และเราเห็นว่าการออกไปนอกเส้นทางของเราเพื่อสร้าง iterable เพียงแค่ใช้การขยายคือการเสียเวลา (เล็กน้อย):
>>> min(timeit.repeat(lambda: append_one([], 0)))
0.2082819009956438
>>> min(timeit.repeat(lambda: extend_one([], 0)))
0.2397019260097295
เราเรียนรู้จากสิ่งนี้ว่าไม่มีสิ่งใดที่ได้รับจากการใช้extend
เมื่อเรามีเพียงองค์ประกอบเดียวที่จะผนวก
นอกจากนี้การกำหนดเวลาเหล่านี้ก็ไม่สำคัญเช่นกัน ฉันแค่แสดงให้พวกเขาเห็นว่าใน Python การทำสิ่งที่ถูกต้องทางความหมายคือการทำสิ่งที่ถูกต้อง ™
เป็นไปได้ว่าคุณอาจทดสอบการกำหนดเวลาในการดำเนินการที่เปรียบเทียบกันสองแบบและรับผลลัพธ์ที่คลุมเครือหรือผกผัน เพียงแค่มุ่งเน้นการทำสิ่งที่ถูกต้องทางความหมาย
เราจะเห็นว่าextend
เป็นความหมายที่ชัดเจนและมันสามารถทำงานได้เร็วกว่าappend
, เมื่อคุณตั้งใจจะผนวกแต่ละองค์ประกอบใน iterable ไปยังรายการ
หากคุณมีเพียงองค์ประกอบเดียว (ไม่ได้อยู่ใน iterable) append
เพื่อเพิ่มลงในรายการการใช้งาน
ex1 = 0
และex2 = [0]
) และส่งผ่านตัวแปรเหล่านี้หากคุณต้องการเข้มงวดมากขึ้น
l1 += l2
vs l1.extend(l2)
ล่ะ
l1 += l2
และl1.extend(l2)
ในที่สุดก็ใช้รหัสเดียวกัน ( list_extend
ฟังก์ชั่นในlistobject.c
) ความแตกต่างเพียงอย่างเดียวคือ: 1. การ+=
มอบหมายใหม่l1
(สำหรับตัวเองสำหรับlist
s แต่การมอบหมายใหม่สนับสนุนประเภทที่ไม่เปลี่ยนรูปแบบซึ่งไม่ใช่วัตถุเดียวกันหลังจาก) ซึ่งทำให้ผิดกฎหมายหากl1
เป็นคุณลักษณะของวัตถุที่ไม่เปลี่ยนรูปแบบจริง ตัวอย่างเช่นt = ([],)
, t[0] += lst
จะล้มเหลวในขณะที่t[0].extend(lst)
การทำงานหากว่า 2. l1 += l2
ใช้รหัสไบต์โดยเฉพาะในขณะที่l1.extend(l2)
ใช้วิธีส่งแบบทั่วไป นี้จะทำให้เร็วกว่า+=
extend
+=
ต้องกำหนดใหม่l1
หมายความว่าในบางกรณีการส่งช้าลงของextend
บางส่วนหรือทั้งหมดสร้างขึ้นโดยไม่กำหนดกลับไปทางด้านซ้ายมือ ตัวอย่างเช่นถ้าlist
เป็นคุณลักษณะของวัตถุself.l1 += l2
และself.l1.extend(l2)
มีประสิทธิภาพการทำงานที่เหมือนกันบน Python 3.6 ติดตั้งของฉันเพียงเพราะการดำเนินงานที่แท้จริงมากขึ้นเช่นself.l1 = self.l1.__iadd__(l2)
ซึ่งหมายความว่ามันต้องดำเนินการที่มีราคาแพงในระดับปานกลางSTORE_ATTR
ที่self.l1.extend(l2)
ไม่ได้มีการ
+=
ใช้งานเพียงอย่างเดียวSTORE_FAST
ซึ่งราคาถูกสุด ๆ ) ซึ่งการเพิ่มมูลค่านั้นมีอยู่list
ด้วยหนึ่งรายการในนั้นโดยการดำเนินการซ้ำ 1,000 ครั้ง+=
ใช้เวลาประมาณ 33 ns โดยเฉลี่ย ในขณะที่extend
ใช้เวลา 78 ns ความแตกต่างจาก 45 ns หากl1
เป็นระดับโลก (ต้องมีราคาแพงกว่าSTORE_GLOBAL
) ความแตกต่างจะแคบลงถึง 17 ns หากl1
เป็นจริงlocal.l1
(ต้องใช้ราคาแพงกว่าSTORE_ATTR
) จะไม่มีความแตกต่างที่มีความหมายระหว่าง+=
และextend
(การกำหนดเวลาเหมือนกันโดยประมาณ; extend
บางครั้งชนะ)
append
ผนวกองค์ประกอบเดียว extend
ผนวกรายการขององค์ประกอบ
โปรดทราบว่าหากคุณส่งรายการเพื่อผนวกมันยังคงเพิ่มองค์ประกอบหนึ่ง:
>>> a = [1, 2, 3]
>>> a.append([4, 5, 6])
>>> a
[1, 2, 3, [4, 5, 6]]
ด้วยการผนวกคุณสามารถผนวกองค์ประกอบเดียวที่จะขยายรายการ:
>>> a = [1,2]
>>> a.append(3)
>>> a
[1,2,3]
หากคุณต้องการขยายองค์ประกอบมากกว่าหนึ่งรายการคุณควรใช้ส่วนขยายเนื่องจากคุณสามารถผนวกองค์ประกอบหนึ่งรายการหรือองค์ประกอบรายการหนึ่งรายการเท่านั้น:
>>> a.append([4,5])
>>> a
>>> [1,2,3,[4,5]]
เพื่อให้คุณได้รับรายการซ้อนกัน
แทนที่จะขยายคุณสามารถขยายองค์ประกอบเดียวเช่นนี้
>>> a = [1,2]
>>> a.extend([3])
>>> a
[1,2,3]
หรือแตกต่างจากภาคผนวกขยายองค์ประกอบเพิ่มเติมในคราวเดียวโดยไม่ซ้อนรายการเข้าไปในองค์ประกอบดั้งเดิม (นั่นคือเหตุผลของการขยายชื่อ)
>>> a.extend([4,5,6])
>>> a
[1,2,3,4,5,6]
ทั้งผนวกและขยายสามารถเพิ่มองค์ประกอบหนึ่งไปยังจุดสิ้นสุดของรายการแม้ว่าการผนวกจะง่ายกว่า
>>> x = [1,2]
>>> x.append(3)
>>> x
[1,2,3]
>>> x = [1,2]
>>> x.extend([3])
>>> x
[1,2,3]
หากคุณใช้ส่วนต่อท้ายสำหรับองค์ประกอบมากกว่าหนึ่งรายการคุณจะต้องส่งรายการองค์ประกอบเป็นอาร์กิวเมนต์และคุณจะได้รับรายชื่อแบบย่อย!
>>> x = [1,2]
>>> x.append([3,4])
>>> x
[1,2,[3,4]]
ด้วยการขยายแทนคุณส่งรายการเป็นอาร์กิวเมนต์ แต่คุณจะได้รับรายการที่มีองค์ประกอบใหม่ที่ไม่ซ้อนในรายการเก่า
>>> z = [1,2]
>>> z.extend([3,4])
>>> z
[1,2,3,4]
ดังนั้นด้วยองค์ประกอบเพิ่มเติมคุณจะใช้ส่วนขยายเพื่อรับรายการที่มีรายการเพิ่มเติม อย่างไรก็ตามการผนวกรายการจะไม่เพิ่มองค์ประกอบเข้าไปในรายการ แต่จะมีองค์ประกอบหนึ่งที่เป็นรายการแบบซ้อนตามที่คุณเห็นได้อย่างชัดเจนในผลลัพธ์ของรหัส
ตัวอย่างสองต่อไปนี้เทียบเท่ากันทางความหมาย:
for item in iterator:
a_list.append(item)
และ
a_list.extend(iterator)
หลังอาจเร็วขึ้นเนื่องจากมีการใช้งานลูปใน C
extend()
อาจ preallocates ในขณะที่append()
มีแนวโน้มไม่
extend()
ไม่สามารถจัดสรรล่วงหน้าได้อย่างมีเหตุผลเนื่องจากมีบาง iterables ไม่ได้ใช้__len__()
แต่เหมือนคุณฉันจะแปลกใจถ้ามันไม่ลอง บางส่วนของการเพิ่มประสิทธิภาพการทำงานนอกจากนี้ยังมาจากการทำซ้ำส่วนหนึ่งใน C บริสุทธิ์แทนในหลามเป็นแหลมออกมาในคำตอบของอาโรน
append()
วิธีการเพิ่มรายการเดียวที่ส่วนท้ายของรายการ
x = [1, 2, 3]
x.append([4, 5])
x.append('abc')
print(x)
# gives you
[1, 2, 3, [4, 5], 'abc']
extend()
วิธีการใช้เวลาหนึ่งอาร์กิวเมนต์รายการและผนวกแต่ละรายการของการโต้แย้งไปในรายการเดิม (รายการจะถูกนำมาใช้เป็นคลาส“ การสร้าง” รายการนั้นทำให้อินสแตนซ์ของคลาสเป็นจริงยกตัวอย่างเช่นรายการมีวิธีการที่ใช้กับมัน)
x = [1, 2, 3]
x.extend([4, 5])
x.extend('abc')
print(x)
# gives you
[1, 2, 3, 4, 5, 'a', 'b', 'c']
extend
เป็นรายการที่มีองค์ประกอบหนึ่ง['abc']
: [1, 2, 3, 4, 5, 'abc'] ที่จะทำให้การส่งออกตัวอย่างของคุณถูกต้องเปลี่ยน abc x.extend('abc')
สายไปที่: และลบหรือเปลี่ยนไปx.extend(6)
x.extend([6])
คุณสามารถใช้ "+" สำหรับการกลับมาขยายแทนที่จะขยายในสถานที่
l1=range(10)
l1+[11]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11]
l2=range(10,1,-1)
l1+l2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4, 3, 2]
ในทำนองเดียวกัน+=
สำหรับในพฤติกรรมของสถานที่ แต่มีความแตกต่างเล็กน้อยจาก&append
extend
หนึ่งในความแตกต่างที่ใหญ่ที่สุดของ+=
จากappend
และextend
เมื่อมันถูกนำมาใช้ในขอบเขตฟังก์ชั่นดูบล็อกโพสต์นี้
append(object)
- อัปเดตรายการโดยเพิ่มวัตถุลงในรายการ
x = [20]
# List passed to the append(object) method is treated as a single object.
x.append([21, 22, 23])
# Hence the resultant list length will be 2
print(x)
--> [20, [21, 22, 23]]
extend(list)
- เป็นหลักเชื่อมสองรายการ
x = [20]
# The parameter passed to extend(list) method is treated as a list.
# Eventually it is two lists being concatenated.
x.extend([21, 22, 23])
# Here the resultant list's length is 4
print(x)
[20, 21, 22, 23]
extend()
สามารถใช้กับอาร์กิวเมนต์ตัววนซ้ำ นี่คือตัวอย่าง คุณต้องการสร้างรายชื่อออกจากรายชื่อด้วยวิธีนี้:
จาก
list2d = [[1,2,3],[4,5,6], [7], [8,9]]
คุณต้องการ
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
คุณอาจใช้itertools.chain.from_iterable()
เพื่อทำเช่นนั้น เอาต์พุตของเมธอดนี้เป็นตัววนซ้ำ มันใช้งานได้เทียบเท่า
def from_iterable(iterables):
# chain.from_iterable(['ABC', 'DEF']) --> A B C D E F
for it in iterables:
for element in it:
yield element
กลับไปที่ตัวอย่างของเราเราทำได้
import itertools
list2d = [[1,2,3],[4,5,6], [7], [8,9]]
merged = list(itertools.chain.from_iterable(list2d))
และรับรายการที่ต้องการ
นี่คือวิธีที่เท่าเทียมกันที่extend()
สามารถใช้กับอาร์กิวเมนต์ตัววนซ้ำได้:
merged = []
merged.extend(itertools.chain.from_iterable(list2d))
print(merged)
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9]
นี่คือเทียบเท่าappend
และextend
ใช้+
โอเปอเรเตอร์:
>>> x = [1,2,3]
>>> x
[1, 2, 3]
>>> x = x + [4,5,6] # Extend
>>> x
[1, 2, 3, 4, 5, 6]
>>> x = x + [[7,8]] # Append
>>> x
[1, 2, 3, 4, 5, 6, [7, 8]]
ผนวก () : โดยทั่วไปจะใช้ใน Python เพื่อเพิ่มองค์ประกอบหนึ่ง
ตัวอย่างที่ 1:
>> a = [1, 2, 3, 4]
>> a.append(5)
>> print(a)
>> a = [1, 2, 3, 4, 5]
ตัวอย่างที่ 2:
>> a = [1, 2, 3, 4]
>> a.append([5, 6])
>> print(a)
>> a = [1, 2, 3, 4, [5, 6]]
expand () : โดยที่ expand () ใช้เพื่อรวมสองรายการหรือแทรกหลายองค์ประกอบในรายการเดียว
ตัวอย่างที่ 1:
>> a = [1, 2, 3, 4]
>> b = [5, 6, 7, 8]
>> a.extend(b)
>> print(a)
>> a = [1, 2, 3, 4, 5, 6, 7, 8]
ตัวอย่างที่ 2:
>> a = [1, 2, 3, 4]
>> a.extend([5, 6])
>> print(a)
>> a = [1, 2, 3, 4, 5, 6]
จุดที่น่าสนใจที่ถูกบอกใบ้ แต่ไม่ได้อธิบายคือการขยายนั้นเร็วกว่าการผนวก สำหรับลูปใด ๆ ที่มีการผนวกไว้ข้างในควรพิจารณาว่าจะถูกแทนที่ด้วย list.extend (แปรรูป _elements)
โปรดจำไว้ว่าการผนวกองค์ประกอบใหม่อาจส่งผลให้การตอบกลับทั้งหมดของรายการไปยังตำแหน่งที่ดีขึ้นในหน่วยความจำ หากทำหลายครั้งเพราะเราผนวก 1 องค์ประกอบต่อครั้งประสิทธิภาพโดยรวมจะลดลง ในแง่นี้ list.extend คล้ายคลึงกับ "" .join (รายการสตริง)
ผนวกจะเพิ่มข้อมูลทั้งหมดในครั้งเดียว ข้อมูลทั้งหมดจะถูกเพิ่มไปยังดัชนีที่สร้างขึ้นใหม่ ในทางกลับกัน,extend
ขณะที่ชื่อแนะนำขยายอาร์เรย์ปัจจุบัน
ตัวอย่างเช่น
list1 = [123, 456, 678]
list2 = [111, 222]
ด้วยการappend
ที่เราได้รับ:
result = [123, 456, 678, [111, 222]]
ในขณะที่extend
เราได้รับ:
result = [123, 456, 678, 111, 222]
พจนานุกรมภาษาอังกฤษกำหนดคำappend
และextend
เป็น:
ผนวก : เพิ่ม (บางสิ่ง) ที่ส่วนท้ายของเอกสารที่เป็นลายลักษณ์อักษร
ขยาย : ทำให้ใหญ่ขึ้น ขยายหรือขยาย
ด้วยความรู้นั้นตอนนี้มาทำความเข้าใจกันเถอะ
1) ความแตกต่างระหว่างappend
และextend
append
:
extend
:
list(iterable)
เป็นผลมาจากการใช้2) ความคล้ายคลึงกันระหว่างappend
และextend
None
เป็นผลให้ทั้งผลตอบแทนตัวอย่าง
lis = [1, 2, 3]
# 'extend' is equivalent to this
lis = lis + list(iterable)
# 'append' simply appends its argument as the last element to the list
# as long as the argument is a valid Python object
list.append(object)
ฉันหวังว่าฉันสามารถทำเสริมที่เป็นประโยชน์สำหรับคำถามนี้ หากรายการของคุณเก็บวัตถุชนิดเฉพาะตัวอย่างเช่นInfo
นี่เป็นสถานการณ์ที่extend
วิธีการไม่เหมาะสม: ในการfor
วนซ้ำและการสร้างInfo
วัตถุทุกครั้งและการใช้extend
เพื่อเก็บไว้ในรายการของคุณมันจะล้มเหลว ข้อยกเว้นเป็นดังนี้:
TypeError: วัตถุ 'ข้อมูล' ไม่สามารถทำซ้ำได้
แต่ถ้าคุณใช้append
วิธีนี้ผลลัพธ์ก็คือตกลง เนื่องจากทุกครั้งที่ใช้extend
เมธอดเมธอดจะถือว่าเป็นรายการหรือประเภทคอลเลกชันอื่น ๆ วนซ้ำและวางหลังจากรายการก่อนหน้า วัตถุเฉพาะไม่สามารถทำซ้ำได้อย่างชัดเจน
เพื่อแยกแยะพวกมันอย่างสังหรณ์ใจ
l1 = ['a', 'b', 'c']
l2 = ['d', 'e', 'f']
l1.append(l2)
l1
['a', 'b', 'c', ['d', 'e', 'f']]
มันเหมือนกับl1
การทำซ้ำร่างกายภายในร่างกายของเธอ (ซ้อนกัน)
# Reset l1 = ['a', 'b', 'c']
l1.extend(l2)
l1
['a', 'b', 'c', 'd', 'e', 'f']
มันเหมือนกับว่าคนสองคนที่แยกจากกันได้แต่งงานและสร้างครอบครัวที่เป็นหนึ่งเดียวกัน
นอกจากนี้ฉันทำ cheatsheet ครบถ้วนสมบูรณ์ของวิธีการของรายการทั้งหมดสำหรับการอ้างอิงของคุณ
list_methods = {'Add': {'extend', 'append', 'insert'},
'Remove': {'pop', 'remove', 'clear'}
'Sort': {'reverse', 'sort'},
'Search': {'count', 'index'},
'Copy': {'copy'},
}
extend(L)
L
ขยายรายการโดยท้ายรายการทั้งหมดในรายการที่กำหนด
>>> a
[1, 2, 3]
a.extend([4]) #is eqivalent of a[len(a):] = [4]
>>> a
[1, 2, 3, 4]
a = [1, 2, 3]
>>> a
[1, 2, 3]
>>> a[len(a):] = [4]
>>> a
[1, 2, 3, 4]
append
"ขยาย" รายการ (แทนที่) โดยรายการเดียววัตถุเดียวที่ส่งผ่าน (เป็นอาร์กิวเมนต์)
extend
"ขยาย" รายการ (ในสถานที่) โดยมีหลายรายการที่วัตถุผ่าน (เป็นอาร์กิวเมนต์) มี
สิ่งนี้อาจทำให้str
วัตถุสับสนเล็กน้อย
append
จะเพิ่มรายการสตริงเดียวในตอนท้าย แต่
extend
จะเพิ่มรายการ "single" 'str' จำนวนมากตามความยาวของสตริงนั้นappend
จะยังคงเพิ่มรายการ 'รายการ' เดียวที่ส่วนท้ายและ
extend
จะเพิ่มรายการ 'รายการ' เป็นจำนวนมากตามความยาวของรายการที่ส่งผ่านdef append_o(a_list, element): a_list.append(element) print('append:', end = ' ') for item in a_list: print(item, end = ',') print() def extend_o(a_list, element): a_list.extend(element) print('extend:', end = ' ') for item in a_list: print(item, end = ',') print() append_o(['ab'],'cd') extend_o(['ab'],'cd') append_o(['ab'],['cd', 'ef']) extend_o(['ab'],['cd', 'ef']) append_o(['ab'],['cd']) extend_o(['ab'],['cd'])
ผลิต:
append: ab,cd,
extend: ab,c,d,
append: ab,['cd', 'ef'],
extend: ab,cd,ef,
append: ab,['cd'],
extend: ab,cd,
ผนวกและขยายเป็นหนึ่งในกลไกการขยายในหลาม
ผนวก: เพิ่มองค์ประกอบที่ส่วนท้ายของรายการ
my_list = [1,2,3,4]
ในการเพิ่มองค์ประกอบใหม่ลงในรายการเราสามารถใช้วิธีการผนวกในวิธีต่อไปนี้
my_list.append(5)
ตำแหน่งเริ่มต้นที่จะเพิ่มองค์ประกอบใหม่นั้นจะอยู่ในตำแหน่ง (ความยาว + 1) เสมอ
ส่วนแทรก: วิธีการแทรกถูกใช้เพื่อเอาชนะข้อ จำกัด ของการผนวก ด้วยการแทรกเราสามารถกำหนดตำแหน่งที่แน่นอนที่เราต้องการแทรกองค์ประกอบใหม่ได้
วิธีการอธิบายของการแทรก (ดัชนีวัตถุ) มันต้องใช้สองข้อโต้แย้งอันดับแรกคือดัชนีที่เราต้องการแทรกองค์ประกอบของเราและอันดับที่สององค์ประกอบนั้น
Example: my_list = [1,2,3,4]
my_list[4, 'a']
my_list
[1,2,3,4,'a']
ขยาย: มีประโยชน์มากเมื่อเราต้องการเข้าร่วมสองรายการขึ้นไปในรายการเดียว โดยไม่ขยายถ้าเราต้องการเข้าร่วมสองรายการวัตถุผลลัพธ์จะมีรายการ
a = [1,2]
b = [3]
a.append(b)
print (a)
[1,2,[3]]
หากเราพยายามเข้าถึงองค์ประกอบที่ pos 2 เราจะได้รับรายการ ([3]) แทนที่จะเป็นองค์ประกอบ ในการเข้าร่วมสองรายการเราจะต้องใช้ส่วนต่อท้าย
a = [1,2]
b = [3]
a.extend(b)
print (a)
[1,2,3]
เพื่อเข้าร่วมหลายรายการ
a = [1]
b = [2]
c = [3]
a.extend(b+c)
print (a)
[1,2,3]
extend
และก็ใช้ประกอบการนอกจากนี้ - ในตัวอย่างข้างต้นx = x + [4, 5]
?