ตรวจสอบว่ารายการอยู่ในอาร์เรย์ / รายการ


203

ถ้าฉันมีอาร์เรย์ของสตริงฉันสามารถตรวจสอบเพื่อดูว่าสตริงอยู่ในอาร์เรย์โดยไม่ทำการforวนซ้ำหรือไม่? โดยเฉพาะฉันกำลังมองหาวิธีที่จะทำมันในifคำสั่งดังนั้นบางสิ่งเช่นนี้:

if [check that item is in array]:

3
ฉันคิดว่าคำถามได้ตอบแล้วที่นี่
Tarun Ande

1
หรือดีกว่าที่นี่: stackoverflow.com/questions/12934190/…
torina

คำตอบ:


396

สมมติว่าคุณหมายถึง "รายการ" ที่คุณพูดว่า "อาร์เรย์" คุณสามารถทำได้

if item in my_list:
    # whatever

สิ่งนี้ใช้ได้กับคอลเลกชันใด ๆ ไม่ใช่เฉพาะสำหรับรายการ สำหรับพจนานุกรมจะตรวจสอบว่ามีรหัสที่ให้ไว้ในพจนานุกรม


1
@jdi และลูปนั้นจะทำงานเร็วกว่าโค้ดที่เขียนไว้ใน Python อย่างชัดเจนไม่ต้องพูดถึงว่าอ่านง่ายกว่า
Mark Ransom

17

ฉันจะสมมติว่าคุณหมายถึง "รายการ" เมื่อคุณพูดว่า "อาร์เรย์" วิธีแก้ปัญหาของ Sven Marnach นั้นดี หากคุณกำลังจะทำการตรวจสอบซ้ำแล้วซ้ำอีกในรายการแล้วมันอาจจะคุ้มค่าที่จะแปลงเป็นชุดหรือ frozenet ซึ่งอาจเร็วกว่าสำหรับการตรวจสอบแต่ละครั้ง สมมติว่ารายการ strs ของคุณถูกเรียกว่าsubjects:

subject_set = frozenset(subjects)
if query in subject_set:
    # whatever

3

ใช้ฟังก์ชั่นแลมบ์ดา

สมมติว่าคุณมีอาร์เรย์:

nums = [0,1,5]

ตรวจสอบว่า 5 อยู่ในnums:

(len(filter (lambda x : x == 5, nums)) > 0)

วิธีนี้มีประสิทธิภาพมากขึ้น ตอนนี้คุณสามารถตรวจสอบว่าหมายเลขใด ๆ ที่ตรงตามเงื่อนไขที่กำหนดอยู่ในอาร์เรย์ของคุณnumsหรือไม่

ตัวอย่างเช่นตรวจสอบว่ามีหมายเลขใด ๆ ที่มากกว่าหรือเท่ากับ 5 อยู่ในnums:

(len(filter (lambda x : x >= 5, nums)) > 0)

สิ่งนี้ใช้ได้กับ Python2 ด้วย Python 3.7 คุณจะได้รับข้อผิดพลาดนี้:TypeError: object of type 'filter' has no len()
Jun711

1

คุณต้องใช้. ค่าสำหรับอาร์เรย์ ตัวอย่างเช่นสมมติว่าคุณมี dataframe ซึ่งมีชื่อคอลัมน์เช่นทดสอบ ['ชื่อ'] คุณสามารถทำได้

if name in test['Name'].values :
   print(name)

สำหรับรายการปกติคุณไม่จำเป็นต้องใช้ค่า


ฉันคิดว่าคุณต้องใช้วัตถุ Panda DataFrame เพื่อใช้. value
troymyname00

-3

คุณยังสามารถใช้ไวยากรณ์เดียวกันสำหรับอาร์เรย์ ตัวอย่างเช่นการค้นหาภายในซีรี่ส์ Pandas:

ser = pd.Series(['some', 'strings', 'to', 'query'])

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