Cara mana-mana dan semua Fungsi Python Berfungsi
Apabila membandingkan tupel, kedua-dua fungsi terbina dalam any() dan all() dimasukkan ke dalam bermain. Begini cara mereka berbeza:
mana-mana()
mana-mana() menilai kepada Benar jika sekurang-kurangnya satu elemen dalam lelaran ialah Truthy (iaitu, bukan Palsu, 0, '', dsb.).
semua()
semua(), sebaliknya, mengembalikan True hanya apabila setiap elemen dalam lelaran adalah Truthy.
Memahami Kes Penggunaan
Dalam coretan kod disediakan:
print [any(x) and not all(x) for x in zip(*d['Drd2'])]
Setiap tupel dalam zip(*d['Drd2']) dinilai dalam konteks mana-mana(x) dan bukan semua(x). Walau bagaimanapun, output [Salah, Salah, Salah] yang tidak dijangka menimbulkan persoalan.
Tafsiran Ralat
Mengikut jadual kebenaran untuk mana-mana dan semua:
any(x) | all(x) | any(x) and not all(x) |
---|---|---|
True | False | True |
False | True | False |
True | True | False |
False | False | False |
Dalam kes ini, semua tupel terdiri daripada nombor yang sama (iaitu, nilai Benar), jadi sebarang(x) akan sentiasa Benar, dan semua(x) juga akan Benar. Akibatnya, mana-mana(x) dan bukan semua(x) hendaklah sentiasa menilai kepada Palsu, yang tidak ditunjukkan dalam output.
Punca Ralat
Ralat terletak dalam jangkaan yang salah bahawa (x[0] != x[1]) akan menjadi ungkapan Benar. Walau bagaimanapun, apabila nombor dalam tupel adalah sama (cth., (1, 1)), (x[0] != x[1]) menilai kepada Salah.
Logik Betul
Untuk menentukan dengan tepat sama ada sebarang nilai dalam tuple adalah berbeza, anda boleh menggunakan yang berikut logik:
print [x[0] != x[1] for x in zip(*d['Drd2'])]
Ungkapan ini membandingkan dengan betul elemen yang sepadan bagi setiap tuple untuk mengenal pasti sebarang perbezaan, seperti yang dimaksudkan.
Atas ialah kandungan terperinci Bagaimanakah Fungsi `any()` dan `all()` Python Bertindak Apabila Membandingkan Tuples?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!