Saya menemukan, bahwa ada pertanyaan terkait, tentang bagaimana menemukan jika setidaknya satu item ada dalam daftar:
Bagaimana cara memeriksa apakah salah satu dari item berikut ada dalam daftar?
Tapi apa cara terbaik dan pythonic untuk mengetahui apakah semua item ada dalam daftar?
Mencari melalui dokumen saya menemukan solusi ini:
>>> l = ['a', 'b', 'c']
>>> set(['a', 'b']) <= set(l)
True
>>> set(['a', 'x']) <= set(l)
False
Solusi lain adalah ini:
>>> l = ['a', 'b', 'c']
>>> all(x in l for x in ['a', 'b'])
True
>>> all(x in l for x in ['a', 'x'])
False
Tapi di sini Anda harus lebih banyak mengetik.
Apakah ada solusi lain?
set(smaller) <= set(larger)
?Jawaban:
Operator seperti
<=
di Python umumnya tidak diganti menjadi sesuatu yang sangat berbeda dari "kurang dari atau sama dengan". Ini tidak biasa untuk perpustakaan standar yang melakukan ini - baunya seperti API warisan bagi saya.Gunakan metode yang setara dan lebih jelas namanya
set.issubset
,. Perhatikan bahwa Anda tidak perlu mengubah argumen menjadi satu set; itu akan melakukannya untuk Anda jika diperlukan.sumber
<=
danissubset
arti yang sama. Mengapa Anda tidak menyukainya?<=
artinya set tanpa mencarinya di dokumen atau memiliki pengetahuan sebelumnya tentang apa artinya dalam teori himpunan, sedangkan semua orang tahu apaissubset
artinya secara otomatis.Saya mungkin akan menggunakan
set
dengan cara berikut:atau sebaliknya:
Saya merasa ini sedikit lebih mudah dibaca, tetapi mungkin terlalu mematikan. Set sangat berguna untuk menghitung persatuan / persimpangan / perbedaan antara koleksi, tetapi ini mungkin bukan pilihan terbaik dalam situasi ini ...
sumber
MySet.issubset(MyOtherSet)
danMySet <= MyOtherSet
sama saja.<=
memiliki arti yang dilakukannya untuk urutan: orang mungkin berharap itu berarti 'adalah lanjutan' daripada urutan leksikografis.<=
dengan urutan juga terasa aneh, entah bagaimana ...set(['a','a']).issubset(['a'])
kembaliTrue
.Saya suka keduanya karena mereka tampak paling logis, yang terakhir lebih pendek dan mungkin tercepat (ditampilkan di sini menggunakan
set
sintaks literal yang telah di- backport ke Python 2.7):sumber
Bagaimana jika daftar Anda berisi duplikat seperti ini:
Set tidak mengandung duplikat. Jadi, baris berikut mengembalikan True.
Untuk menghitung duplikat, Anda dapat menggunakan kode:
Jadi, baris berikut mengembalikan False.
sumber
Ini adalah apa yang saya cari secara online tetapi sayangnya tidak ditemukan secara online tetapi saat bereksperimen dengan penerjemah python.
dan jika Anda memiliki daftar variabel yang terlalu banyak di file
sublist variable
sumber
Contoh cara melakukan ini menggunakan ekspresi lambda adalah:
sumber
Bukan kasus OP, tetapi - untuk siapa saja yang ingin menegaskan persimpangan di penis dan berakhir di sini karena googling yang buruk (misalnya saya) - Anda perlu bekerja dengan
dict.items
:Itu karena
dict.items
mengembalikan tupel pasangan kunci / nilai, dan seperti objek lainnya di Python, keduanya dapat dibandingkansumber