mulai dengan dengan daftar string untuk menguji


183

Saya mencoba untuk menghindari menggunakan begitu banyak pernyataan dan perbandingan jika hanya menggunakan daftar, tetapi tidak yakin bagaimana menggunakannya dengan 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"

Yang saya inginkan adalah:

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

Bantuan apa pun akan dihargai.


7
Jawaban atas pertanyaan ini mengingatkan saya mengapa saya sangat mencintai Python!
— dotancohen

Bahkan jika Anda perlu melakukan beberapa pemeriksaan untuk beberapa alasan, Anda harus menyimpan hasil dari ˋlower () ˋ. Tidak ada gunanya melakukan itu lagi dan lagi.
— Bachsau

Jawaban:


346

str.startswith memungkinkan Anda untuk memasok sejumlah string untuk menguji:

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

Dari dokumen :

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

Kembali Truejika string dimulai dengan prefix, jika tidak kembali False. prefixjuga bisa menjadi tuple dari awalan yang harus dicari.

Di bawah ini adalah demonstrasi:

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

3
Dan jika itu tidak mendukung ini, Anda tetap bisa melakukannya dengan anydan sebuah exp.
— user2357112 mendukung Monica

Bersyarat kontrafaktual, bukan "mungkin OP ada di versi lama".
— user2357112 mendukung Monica

hei, jika saya menggunakan ini sebagai bagian dari fungsi, bagaimana saya bisa mendapatkannya untuk mengembalikan item dari daftar yang cocok?
— roastbeeef

@roastbeeef ˋforˋ loop. Tidak ada pilihan lain. ;)
— Bachsau

26

Anda juga dapat menggunakan any(), map()seperti:

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

Atau sebagai alternatif, menggunakan ekspresi generator :

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

6
Jangan gunakan pemahaman daftar dengan siapa pun; gunakan generator.
— DylanYoung
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.