วิธีการลบรายการแรกออกจากรายการ?


773

ฉันมีรายการฉันต้องการที่จะทำให้มันกลายเป็น[0, 1, 2, 3, 4] [1, 2, 3, 4]ฉันจะไปเกี่ยวกับเรื่องนี้ได้อย่างไร

คำตอบ:


1259

รายการ Python

list.pop (ดัชนี)

>>> l = ['a', 'b', 'c', 'd']
>>> l.pop(0)
'a'
>>> l
['b', 'c', 'd']
>>> 

รายการ [ดัชนี]

>>> l = ['a', 'b', 'c', 'd']
>>> del l[0]
>>> l
['b', 'c', 'd']
>>> 

ทั้งสองนี้แก้ไขรายการดั้งเดิมของคุณ

คนอื่น ๆ แนะนำให้ใช้การแบ่งส่วน:

  • คัดลอกรายการ
  • สามารถส่งคืนชุดย่อย

นอกจากนี้หากคุณแสดงป๊อปอัพจำนวนมาก (0) คุณควรดูcollection.deque

from collections import deque
>>> l = deque(['a', 'b', 'c', 'd'])
>>> l.popleft()
'a'
>>> l
deque(['b', 'c', 'd'])
  • ให้ประสิทธิภาพที่สูงขึ้น popping จากด้านซ้ายของรายการ

นอกจากนี้คุณยังสามารถใช้ดัชนีเชิงลบซึ่งมีความหมายเดียวกันกับรายการ
Gabriel Devillers

189

slicing:

x = [0,1,2,3,4]
x = x[1:]

ซึ่งจริง ๆ แล้วจะส่งคืนชุดย่อยของต้นฉบับ แต่ไม่สามารถแก้ไขได้


17
หากxว่างเปล่าx=x[1:]จะปล่อยว่างไว้โดยไม่บ่น จะโยนสำหรับรายการที่ว่างเปล่าx.pop(0) xบางครั้งการขว้างปาก็เป็นสิ่งที่เราต้องการ: ถ้าข้อสันนิษฐานว่ามีองค์ประกอบอย่างน้อยในรายการผิดอาจต้องการรับการแจ้งเตือน
อี๊ด

ขอบคุณสำหรับสิ่งนี้! นี่เป็นคำตอบที่ดีกว่า imo เพราะมันไม่เป็นอันตราย
ฮีจิน


29

ด้วยการแบ่งรายการให้ดูบทช่วยสอนเกี่ยวกับรายการเพื่อดูรายละเอียดเพิ่มเติม:

>>> l = [0, 1, 2, 3, 4]
>>> l[1:]
[1, 2, 3, 4]

29

คุณจะทำเช่นนี้

l = [0, 1, 2, 3, 4]
l.pop(0)

หรือ l = l[1:]

ข้อดีและข้อเสีย

ใช้ป๊อปคุณสามารถดึงค่า

พูดx = l.pop(0) xจะเป็น0



8

คุณสามารถใช้list.reverse()เพื่อย้อนกลับรายการจากนั้นlist.pop()ลบองค์ประกอบสุดท้ายตัวอย่างเช่น:

l = [0, 1, 2, 3, 4]
l.reverse()
print l
[4, 3, 2, 1, 0]


l.pop()
0
l.pop()
1
l.pop()
2
l.pop()
3
l.pop()
4

5

นอกจากนี้คุณยังสามารถใช้list.remove(a[0])เพื่อpopออกองค์ประกอบแรกในรายการ

>>>> a=[1,2,3,4,5]
>>>> a.remove(a[0])
>>>> print a
>>>> [2,3,4,5]

3
OP ไม่ได้ถามเกี่ยวกับวิธีการที่ดีที่สุด นี่เป็นอีกวิธีหนึ่งในการบรรลุเป้าหมายเดียวกัน!
จุดสุดยอด

1
ใช่วิธีการอื่นที่ไม่ได้เปรียบเหนือคำตอบอื่น ๆ มีหลายวิธีที่จะทำ ทำไมไม่ให้คำตอบของa.remove(a[1-1])? นั่นเป็นอีกวิธีหนึ่ง
Ned Batchelder

2
ประเด็นของฉันคือคำตอบของคุณแย่กว่าคำตอบอื่น ๆ และไม่มีอะไรจะแนะนำ ไม่มีเหตุผลที่จะใช้คำตอบนี้เหนือผู้อื่น เพียงเพราะมันเป็น "วิธีอื่น" ไม่มีเหตุผลที่จะเพิ่มที่นี่
Ned Batchelder

4
@NedBatchelder จุดของคุณเป็นที่สงสัย เป็นวิธีพิเศษที่มีให้สำหรับรายการใน Python เฉพาะสำหรับงานนี้โดยเฉพาะและเพื่อความครบถ้วนควรสังเกต ตัวอย่าง BS ที่มีการวางแผนไว้ในทางกลับกันก็ไม่เป็นเช่นนั้น ไม่พูดถึงว่าคำตอบของเขาไม่ได้ "แย่กว่าคำตอบอื่น ๆ " ในทางใดทางหนึ่ง
Hejazzman

8
ฉันยืนหยัดอยู่กับคำถามของฉัน: สิ่งนี้ดูแปลกและมีแผนและไม่มีอะไรจะแนะนำ ในความเป็นจริงประโยคแรกเป็นความเข้าใจผิดเพราะคุณไม่สามารถลบองค์ประกอบ i'th list.remove(a[i])ด้วย ด้วยค่าที่ซ้ำกันมันอาจค้นหาองค์ประกอบก่อนหน้านี้ที่มีค่าเดียวกันและลบองค์ประกอบนั้นแทน i'th
เน็ดแบทเชลเดอร์


1

มีโครงสร้างข้อมูลที่เรียกว่า "deque" หรือคิวสิ้นสุดวันที่สองซึ่งเร็วกว่าและมีประสิทธิภาพกว่ารายการ คุณสามารถใช้รายการของคุณและแปลงเป็น deque และทำการแปลงที่ต้องการได้ คุณยังสามารถแปลง deque กลับเป็นรายการได้

import collections
mylist = [0, 1, 2, 3, 4]

#make a deque from your list
de = collections.deque(mylist)

#you can remove from a deque from either left side or right side
de.popleft()
print(de)

#you can covert the deque back to list
mylist = list(de)
print(mylist)

Deque ยังมีฟังก์ชั่นที่มีประโยชน์มากเช่นการแทรกองค์ประกอบไปยังด้านข้างของรายการหรือดัชนีเฉพาะ นอกจากนี้คุณยังสามารถหมุนหรือย้อนกลับ deque ให้มันลอง!!

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