ถ้าฉันมีรหัสหลามต่อไปนี้
>>> x = []
>>> x = x + [1]
>>> x = x + [2]
>>> x = x + [3]
>>> x
[1, 2, 3]
จะx
รับประกันว่าจะเป็น[1,2,3]
หรือจะเรียงลำดับองค์ประกอบระหว่างกาลอื่น ๆ ได้หรือไม่
ถ้าฉันมีรหัสหลามต่อไปนี้
>>> x = []
>>> x = x + [1]
>>> x = x + [2]
>>> x = x + [3]
>>> x
[1, 2, 3]
จะx
รับประกันว่าจะเป็น[1,2,3]
หรือจะเรียงลำดับองค์ประกอบระหว่างกาลอื่น ๆ ได้หรือไม่
คำตอบ:
ใช่ลำดับขององค์ประกอบในรายการหลามยังคงอยู่
def fn_1(): lst = [] lst.append(1) lst.append(2) return lst
และdef fn_2(): print(fn_1())
คำสั่งซื้อจะเหมือนเดิมเสมอโดยไม่คำนึงถึงกี่ครั้งหรือที่เคยใช้ fn_1 ()
ในระยะสั้นใช่คำสั่งซื้อจะถูกเก็บไว้ ในระยะยาว:
โดยทั่วไปคำจำกัดความต่อไปนี้จะใช้กับวัตถุที่ต้องการรายการเสมอ:
รายการคือชุดขององค์ประกอบที่สามารถมีองค์ประกอบที่ซ้ำกันและมีคำสั่งที่กำหนดไว้ว่าโดยทั่วไปจะไม่เปลี่ยนเว้นแต่ทำอย่างชัดเจนที่จะทำเช่นนั้น สแต็คและคิวเป็นรายการทั้งสองประเภทที่มีพฤติกรรมที่เฉพาะเจาะจง (มักถูก จำกัด ) สำหรับการเพิ่มและลบองค์ประกอบ (สแต็กเป็น LIFO, คิวเป็น FIFO) รายการคือการนำเสนอรายการสิ่งต่างๆ สตริงสามารถถูกพิจารณาว่าเป็นรายการของอักขระเนื่องจากลำดับเป็นสิ่งสำคัญ ( "abc" != "bca"
) และอนุญาตให้ทำซ้ำในเนื้อหาของสตริงได้อย่างแน่นอน ( "aaa"
สามารถมีอยู่และ!= "a"
)
ชุดคือชุดขององค์ประกอบที่ไม่สามารถมีรายการที่ซ้ำกันและมีการสั่งซื้อที่ไม่แน่นอนที่อาจจะหรืออาจจะไม่เปลี่ยนแปลงตลอดเวลา เซตไม่ได้แสดงรายการสิ่งต่าง ๆ มากพอ ๆ กับที่มันอธิบายขอบเขตของการเลือกบางอย่าง โครงสร้างภายในของชุดองค์ประกอบที่จัดเก็บนั้นสัมพันธ์กันอย่างไรโดยทั่วไปไม่ได้หมายถึงการถ่ายทอดข้อมูลที่เป็นประโยชน์ ในการนำไปใช้บางชุดชุดจะถูกจัดเรียงภายในเสมอ การสั่งซื้ออื่น ๆ นั้นไม่ได้กำหนดไว้ (โดยทั่วไปจะขึ้นอยู่กับฟังก์ชันแฮช)
คอลเลกชันเป็นคำทั่วไปหมายถึงวัตถุใด ๆ ที่ใช้ในการจัดเก็บ (จำนวนตัวแปรปกติ) ของวัตถุอื่น ๆ ทั้งรายการและชุดเป็นประเภทของการรวบรวม Tuples และ Array นั้นปกติจะไม่ถือว่าเป็นของสะสม บางภาษาพิจารณาว่าแผนที่ (คอนเทนเนอร์ที่อธิบายการเชื่อมโยงระหว่างวัตถุต่าง ๆ ) เพื่อเป็นประเภทของการสะสมเช่นกัน
รูปแบบการตั้งชื่อนี้มีความเป็นจริงสำหรับภาษาการเขียนโปรแกรมทั้งหมดที่ฉันรู้จักรวมถึง Python, C ++, Java, C # และ Lisp (ซึ่งรายการที่ไม่รักษาลำดับของพวกเขาจะเป็นความหายนะอย่างยิ่ง) หากใครรู้ว่าไม่มีกรณีนี้โปรดพูดและฉันจะแก้ไขคำตอบของฉัน โปรดทราบว่าการใช้งานเฉพาะอาจใช้ชื่ออื่นสำหรับวัตถุเหล่านี้เช่นvectorใน C ++ และflexใน ALGOL 68 (ทั้งสองรายการ; flex เป็นเทคนิคที่เป็นเพียงอาร์เรย์ที่ปรับขนาดได้อีกครั้ง)
หากมีความสับสนเกิดขึ้นในกรณีของคุณเนื่องจากลักษณะเฉพาะของการ+
ทำงานของสัญญาณที่นี่เพียงแค่รู้ว่าคำสั่งซื้อนั้นมีความสำคัญต่อรายการและถ้าไม่มีเหตุผลที่ดีที่จะเชื่อมิฉะนั้นคุณสามารถสันนิษฐานได้ว่า . ในกรณีนี้+
สัญญาณจะทำงานเหมือนที่ทำกับสตริง (ซึ่งเป็นเพียงรายการอักขระเท่านั้น): ใช้เนื้อหาของรายการและวางไว้ด้านหลังเนื้อหาของอีกรายการ
ถ้าเรามี
list1 = [0, 1, 2, 3, 4]
list2 = [5, 6, 7, 8, 9]
แล้วก็
list1 + list2
เป็นเช่นเดียวกับ
[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]
ซึ่งประเมินว่า
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ชอบมาก
"abdcde" + "fghijk"
ผลิต
"abdcdefghijk"
คุณกำลังสับสน 'ชุด' และ 'รายการ' ชุดไม่รับประกันการสั่งซื้อ แต่รายการทำ
{}
ชุดมีการประกาศใช้วงเล็บปีกกา: []
ในทางตรงกันข้ามรายการมีการประกาศใช้วงเล็บ:
mySet = {a, b, c, c}
ไม่รับประกันการสั่งซื้อ แต่รายการจะ:
myList = [a, b, c]
ฉันคิดว่าสิ่งหนึ่งที่อาจเกี่ยวข้องกับคุณคือการเข้าร่วมรายการอาจเปลี่ยนแปลงได้หรือไม่เพื่อให้ทั้งสองกลายเป็นหมายเลขที่แตกต่างกัน คุณสามารถทำให้สบายใจได้ที่นี่เพราะใน Python จำนวนเต็มไม่เปลี่ยนรูปหมายความว่าพวกมันไม่สามารถเปลี่ยนแปลงได้หลังจากสร้างขึ้น
แม้ว่าทุกอย่างใน Python จะไม่เปลี่ยนรูปก็ตาม ตัวอย่างเช่นรายการสามารถเปลี่ยนแปลงได้ --- สามารถเปลี่ยนแปลงได้หลังจากสร้างแล้ว ตัวอย่างเช่นถ้าคุณมีรายการ
>>> a = [[1], [2], [3]]
>>> a[0].append(7)
>>> a
[[1, 7], [2], [3]]
ที่นี่ฉันเปลี่ยนรายการแรกของa
(ฉันเพิ่ม7
เข้าไป) ใครจะนึกภาพสับสิ่งต่าง ๆ รอบและรับสิ่งที่ไม่คาดคิดที่นี่ถ้าคุณไม่ระวัง (และแน่นอนสิ่งนี้เกิดขึ้นกับทุกคนเมื่อพวกเขาเริ่มเขียนโปรแกรมใน Python ไม่ทางใดก็ทางหนึ่งเพียงค้นหาไซต์นี้เพื่อ "แก้ไขรายการในขณะที่วนรอบ มัน "เพื่อดูตัวอย่างหลายสิบ)
มันก็คุ้มค่าที่ชี้ให้เห็นว่าx = x + [a]
และx.append(a)
ไม่เหมือนกัน อย่างที่สองการแปรรูปและคนแรกที่สร้างรายการใหม่และกำหนดที่จะx
x
เพื่อให้เห็นความแตกต่างให้ลองตั้งค่าy = x
ก่อนที่จะเพิ่มอะไรให้และพยายามที่แต่ละคนและลักษณะที่แตกต่างกันทั้งสองให้แก่x
y
alist = [1,2,3]
i = 0
for item in aList:
if i<2:
aList.remove(item)
i+=1
alist
[2]
คุณธรรมคือเมื่อแก้ไขรายการในลูปที่ขับเคลื่อนโดยรายการนั้นมีสองขั้นตอน:
aList=[1,2,3]
i=0
for item in aList:
if i<2:
aList[i]="del"
i+=1
aList
['del', 'del', 3]
for i in range(2):
del aList[0]
aList
[3]