มีคุณสมบัติสั้น ๆ สำหรับรายการหรือไม่?

ฉันเห็นว่าผู้คนใช้ any เพื่อรวบรวมรายการอื่นเพื่อดูว่ามีรายการอยู่ในรายการหรือไม่ แต่มีวิธีที่รวดเร็วในการทำสิ่งนี้:

 if list.contains(myItem): # do something 
260
17 окт. Joan Venge ตั้ง 17 ต.ค. 2012-10-17 15:19 '12 เวลา 15:19 2012-10-17 15:19
@ 5 คำตอบ

คุณสามารถใช้ไวยากรณ์นี้:

 if myItem in list: # do something 

นอกจากนี้ตัวดำเนินการผกผัน:

 if myItem not in list: # do something 

มันใช้งานได้ดีสำหรับรายการสิ่งอันดับชุดและ dicts (ปุ่มควบคุม)

โปรดทราบ ว่านี่คือการดำเนินการ O (n) ในรายการและสิ่งอันดับ แต่การดำเนินการ O (1) ในชุดและ dicts

460
17 окт. ตอบกลับกำหนด defuz 17 ต.ค. 2012-10-17 15:21 '12 เวลา 3:21 น. 2012-10-17 15:21

นอกจากสิ่งที่คนอื่นพูดแล้วคุณอาจสนใจที่จะรู้ว่าสิ่งใด in การเรียก list.__contains__ วิธีซึ่งคุณสามารถกำหนดสำหรับชั้นเรียนที่คุณเขียนและสะดวกมากที่จะใช้งูหลามใน เต็ม

สามารถปิดเสียงได้:

border=0
 >>> 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 >>> 
37
17 окт. คำตอบคือได้รับ Ant 17 ตุลาคม 2012-10-17 15:36 '12 เวลา 3:36 น. 2012-10-17 15:36

เมธอดรายการ index ส่งคืน -1 หากไอเท็มหายไปและส่งคืนดัชนีของไอเท็มในรายการหากมีอยู่ หรือใน if คุณสามารถทำสิ่งต่อไปนี้:

 if myItem in list: #do things 

นอกจากนี้คุณยังสามารถตรวจสอบว่ารายการนั้นอยู่ในรายการโดยมีคำสั่งต่อไปนี้หรือไม่:

 if myItem not in list: #do things 
0
คำตอบคือให้ นาย 17 окт. Squig 17 ต.ค. 2012-10-17 15:22 '12 เวลา 15:22 2012-10-17 15:22

เมื่อเร็ว ๆ นี้ฉันมากับซับนี้เพื่อให้ได้ True ถ้ารายการมีจำนวนองค์ประกอบที่เกิดขึ้นหรือ False ถ้ามันไม่มีรายการหรืออะไรเลย การใช้ next(...) จะให้ค่าส่งคืนเริ่มต้น ( False ) และหมายความว่าควรดำเนินการได้เร็วกว่าการเริ่มเข้าใจรายการทั้งหมด

list_does_contain = next((True for item in list_to_test if item == test_item), False)

0
26 янв. คำตอบนั้นได้รับจาก ดัสตินไรมอนดี เมื่อวันที่ 26 มกราคม 2017-01-26 02:08 '17 เวลา 2:08 2017-01-26 02:08

ฉันพบว่านี่เป็นวิธีที่สะดวกที่สุดในการทำเช่นนี้เนื่องจากคุณไม่สามารถใช้สำหรับวิธีวนรอบสำหรับค่าฮาร์ดโค้ดที่ไม่ได้ประกาศใช้

 if list.count(myItem) >= 1: do something... 

เป็นตัวอย่างของปัญหา:

 list = [111,222,333] for 111 in list: print "contained" 

ให้ข้อผิดพลาดในขณะที่ "ถ้า list.count (111)> = 1" จะไม่

0
08 нояб. คำตอบนั้นได้รับจาก Eamonn Kenny 08 พ.ย. 2017-11-08 13:52 '17 เวลา 13:52 น. 2017-11-08 13:52

คำถามอื่น ๆ เกี่ยวกับ หรือ ถามคำถาม