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.