วิธี Pythonic ตรวจสอบว่าเงื่อนไขมีองค์ประกอบใดของรายการหรือไม่


113

ฉันมีรายการใน Python และต้องการตรวจสอบว่าองค์ประกอบใดเป็นลบหรือไม่ Specman มีhas()วิธีการสำหรับรายการที่ทำ:

x: list of uint;
if (x.has(it < 0)) {
    // do something
};

ไหนitเป็นคำหลัก Specman แมปไปยังองค์ประกอบของรายการในการเปิดแต่ละ

ฉันพบว่าสิ่งนี้ค่อนข้างสง่างาม ฉันดูเอกสาร Pythonและไม่พบสิ่งที่คล้ายกัน สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือ:

if (True in [t < 0 for t in x]):
    # do something

ฉันพบว่าสิ่งนี้ค่อนข้างไม่สง่างาม มีวิธีที่ดีกว่านี้ใน Python หรือไม่?

คำตอบ:


189

ใด ๆ () :

if any(t < 0 for t in x):
    # do something

นอกจากนี้หากคุณจะใช้ "True in ... " ให้สร้างนิพจน์ตัวสร้างเพื่อไม่ให้ใช้หน่วยความจำ O (n):

if True in (t < 0 for t in x):

1
การแก้ไข: หากคุณจะใช้True in ...ให้พิจารณาใหม่และใช้anyแทน
Aran-Fey


10

Python มีฟังก์ชัน()ในตัวเพื่อจุดประสงค์นี้


2.5+ เท่านั้น มิฉะนั้นคุณต้องสร้างฟังก์ชันอาจใช้ ifilter และข้อยกเว้นหรือ bool (set ((x สำหรับ x if cond))) หรือสิ่งที่คล้ายกัน
Gregg Lind

1
แทนที่จะเป็น ifilter thingie ที่ซับซ้อนให้ทำ: def any (it): สำหรับ el ในนั้น: if el: return True; return False
Rory
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.