str.startswith के लिए परीक्षण करने के लिए तार की एक सूची के साथ


183

मैं बहुत से उपयोग करने से बचने की कोशिश कर रहा हूं यदि कथन और तुलना और बस एक सूची का उपयोग करें, लेकिन यह सुनिश्चित नहीं करें कि इसका उपयोग कैसे करें str.startswith:

if link.lower().startswith("js/") or link.lower().startswith("catalog/") or link.lower().startswith("script/") or link.lower().startswith("scripts/") or link.lower().startswith("katalog/"):
    # then "do something"

मैं यह होना चाहूंगा:

if link.lower().startswith() in ["js","catalog","script","scripts","katalog"]:
    # then "do something"

किसी भी सहायता की सराहना की जाएगी।


7
इस सवाल के जवाब मुझे याद दिलाते हैं कि मैं अजगर से इतना प्यार क्यों करता हूं!
डॉटनचेन

यहां तक ​​कि अगर आपको किसी कारण से कई जांचें करने की आवश्यकता है, तो आपको )lower () do का परिणाम सहेजना चाहिए। बार-बार करने का कोई मतलब नहीं।
बछसौ

जवाबों:


346

str.startswith आप के लिए परीक्षण करने के लिए तार की एक आपूर्ति की अनुमति देता है:

if link.lower().startswith(("js", "catalog", "script", "katalog")):

से डॉक्स :

str.startswith(prefix[, start[, end]])

वापसी Trueकरता है, तो साथ स्ट्रिंग शुरू होता है prefix, नहीं तो वापसी Falseprefixयह भी देखने के लिए उपसर्गों की एक टुकड़ी हो सकती है।

नीचे एक प्रदर्शन है:

>>> "abcde".startswith(("xyz", "abc"))
True
>>> prefixes = ["xyz", "abc"]
>>> "abcde".startswith(tuple(prefixes)) # You must use a tuple though
True
>>>

3
और अगर यह इसका समर्थन नहीं करता है, तो आप इसे वैसे भी anyऔर एक जीनएक्सपी के साथ कर सकते हैं ।
user2357112

काउंटरफैक्चुअल कंडीशनल, न कि "शायद ओपी एक पुराने संस्करण पर है"।
user2357112

अरे, अगर यह एक समारोह के हिस्से के रूप में उपयोग कर रहा है, तो मैं इसे उस सूची से आइटम वापस करने के लिए कैसे प्राप्त कर सकता हूं जिसे यह मेल खाता है?
रोस्टेबीफ

@roastbeeef ˋforˋ लूप। कोई अन्य विकल्प नहीं। ;)
बछसौ

26

आप भी उपयोग कर सकते हैं any(), map()जैसे:

if any(map(l.startswith, x)):
    pass # Do something

या वैकल्पिक रूप से, एक जनरेटर अभिव्यक्ति का उपयोग कर :

if any(l.startswith(s) for s in x)
    pass # Do something

6
किसी के साथ सूची समझ का उपयोग न करें; एक जनरेटर का उपयोग करें।
डायलनयुंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.