ฉันเห็นคนกำลังใช้anyรวบรวมรายการอื่นเพื่อดูว่ามีรายการอยู่ในรายการหรือไม่ แต่มีวิธีที่รวดเร็วในการทำหรือไม่:
if list.contains(myItem):
# do something
ฉันเห็นคนกำลังใช้anyรวบรวมรายการอื่นเพื่อดูว่ามีรายการอยู่ในรายการหรือไม่ แต่มีวิธีที่รวดเร็วในการทำหรือไม่:
if list.contains(myItem):
# do something
คำตอบ:
คุณสามารถใช้ไวยากรณ์นี้:
if myItem in list:
# do something
นอกจากนี้ตัวดำเนินการผกผัน:
if myItem not in list:
# do something
มันทำงานได้ดีสำหรับรายการสิ่งอันดับชุดและ dicts (ตรวจสอบคีย์)
โปรดทราบว่านี่เป็นการดำเนินการ O (n) ในรายการและสิ่งอันดับ แต่การดำเนินการ O (1) ในชุดและ dicts
o='--skip'; o in ("--skip-ias"); # returns True !
("--skip-ias")ไม่ใช่ tuple แต่สตริง (วงเล็บไม่ทำอะไรเลยเหมือนกับ(1)เป็นจำนวนเต็ม) หากคุณต้องการ 1 tuple คุณต้องเพิ่มเครื่องหมายจุลภาคหลังรายการเดียว: ("--skip-ias",)(หรือ(1,))
นอกจากสิ่งที่คนอื่นพูดคุณอาจสนใจที่จะรู้ว่าสิ่งที่inเรียกว่าlist.__contains__วิธีการที่คุณสามารถกำหนดในชั้นเรียนใด ๆ ที่คุณเขียนและสามารถใช้งานไพ ธ อนได้อย่างเต็มที่
การใช้ใบ้อาจจะ:
>>> class ContainsEverything:
def __init__(self):
return None
def __contains__(self, *elem, **k):
return True
>>> a = ContainsEverything()
>>> 3 in a
True
>>> a in a
True
>>> False in a
True
>>> False not in a
False
>>>
ฉันมากับซับนี้หนึ่งเมื่อเร็ว ๆ นี้เพื่อรับTrueถ้ารายการมีจำนวนรายการที่เกิดขึ้นใด ๆ หรือFalseถ้ามันไม่มีสิ่งใดเกิดขึ้นหรืออะไรเลย การใช้next(...)จะให้ค่าส่งคืนเริ่มต้น ( False) และหมายความว่าควรรันเร็วกว่าการรันรายการความเข้าใจทั้งหมด
list_does_contain = next((True for item in list_to_test if item == test_item), False)
any(item == test_item for item in list_to_test)ฉันจะทำงานด้วยเหมือนกัน
เมธอด list indexจะส่งคืน-1หากไอเท็มไม่มีอยู่และจะส่งคืนดัชนีของไอเท็มในรายการหากมีอยู่ อีกทางเลือกหนึ่งในifคำสั่งที่คุณสามารถทำต่อไปนี้:
if myItem in list:
#do things
นอกจากนี้คุณยังสามารถตรวจสอบว่าองค์ประกอบไม่ได้อยู่ในรายการที่มีคำสั่งต่อไปนี้:
if myItem not in list:
#do things
indexวิธีไม่กลับ -1 ถ้าองค์ประกอบไม่อยู่ก็โยนValueErrorข้อยกเว้น