Saya mengambil kursus algoritma MIT DS&A dan pada masalah jarak dokumen, kita harus mengurai file ke dalam daftar kata, kemudian menghitung frekuensi setiap kata dalam file. Saya kesulitan memahami fungsi berikut:

def count_frequency(word_list):
    """
    Return a list giving pairs of form: (word,frequency)
    """
    L = []
    for new_word in word_list:
        for entry in L:
            if new_word == entry[0]:
                entry[1] = entry[1] + 1
                break
        else:
            L.append([new_word,1])
    return L
  1. Mengapa kami membandingkan new_word dengan entri[0]? Sebuah. Bagaimana jika L kosong? Dengan apa kami membandingkan new_word? b. Mengapa kami membandingkan kata_baru dengan entri[0] secara khusus? Mengapa kita tidak melakukan sesuatu seperti if new_word in L c. Mengapa kita perlu menggunakan break?
  2. Mengapa tab else blok 1 di sebelah kanan blok if sebelumnya? Ketika saya mencoba membuat indentasi blok else, kesalahan indentasi akan muncul.

Terima kasih untuk bantuannya!

2
Jake Nguyen 5 Mei 2020, 06:04

1 menjawab

Jawaban Terbaik

Daftar L berisi entri dua item karena L.append([new_word,1]). Jika L kosong maka for tidak akan dimasukkan, jadi tidak ada masalah dengan entry[0].

entry[0] adalah kata dan entry[1] adalah hitungan. Anda tidak dapat mengatakan if new_word in L karena ini bukan hanya daftar string.

break menghentikan for setelah kata ditemukan.

for/else adalah sesuatu dalam Python. else berjalan jika for selesai tanpa gangguan (dalam hal ini break). Jika new_word tidak ada di L, for tidak akan putus dan kata baru serta hitungan 1 ditambahkan ke L.

FYI, collections.Counter() bawaan akan mengembalikan hasil yang serupa.

2
Mark Tolonen 5 Mei 2020, 03:18