Saya menggunakan any dengan pemahaman daftar. Saya ingin memecahkan pemahaman daftar ketika any mengembalikan True. Sebagai contoh,

import time

def f(x):
    time.sleep(2)
    return x

beginTime = time.time()
result = any([f(x) == 0 for x in [0,1,3,5,7]])
endTime = time.time()

print(endTime - beginTime)

Kode di atas mencetak 10 detik meskipun dapat menghentikan iterasi setelah True pertama.

1
ThePortakal 16 Maret 2021, 14:43

2 jawaban

Jawaban Terbaik

Gunakan generator expression alih-alih list comprehension untuk menghindari pembentukan daftar terlebih dahulu:

result = any(f(x) == 0 for x in [0,1,3,5,7])

(kurung kuadrat dari pemahaman daftar hilang)

Perhatikan bahwa any memiliki perilaku hubungan arus pendek dalam kedua kasus, tetapi yang berbeda adalah kurangnya pembentukan seluruh daftar.

11
Mustafa Aydın 16 Maret 2021, 11:48

Anda dapat menggunakan generator, seperti yang dikatakan oleh Mustafa, tetapi hanya mengambil elemen kebenaran pertama. Generator yang tidak diperlukan harus dikonsumsi sepenuhnya, dan operator walrus melakukan sisanya

import time
def f(x):
    time.sleep(2)
    return x

beginTime = time.time()
result = next((wr  for x in [0,1,3,5,7] if (wr := f(x)) ==0))
endTime = time.time()

print(endTime - beginTime)

Ini hanya membutuhkan waktu minimum untuk mengambil kejadian pertama

0
Glauco 16 Maret 2021, 17:53