Saya memiliki kode berikut:
# dict for replacements
replacements = {'*': 0, ' ': 1, 'A': 2, 'B': 3}
# open and read file
file = open(file, "r")
lines = file.readlines()
file.close()
# row and col count
rows = len(lines)
cols = len(lines[0]) - 1
# create array
maze_array = np.zeros((rows, cols), dtype=str)
# add lines to array
for index, line in enumerate(lines):
for i in range(0, len(line) - 1):
maze_array[index][i] = line[i]
return maze_array
Ini akan membuka file yang isinya hanya '*', ' ', 'A' atau 'B'. Dari file itu saya membaca baris dan mendapatkan jumlah baris serta kolom. Lalu saya membuat array semu di mana saya menambahkan baris untuk mendapatkan output berikut:
[['*' ' ' '*' ... '*' ' ' '*']
['*' ' ' '*' ... ' ' 'B' '*']
['*' '*' '*' ... '*' '*' '*']]
Ketika saya mencetak baris variabel di atas, saya mendapatkan output berikut:
['*****************************************************************\n', '...']
Sekarang tujuan saya adalah mengganti '*', ' ', 'A' atau 'B' dengan nilai dari kamus (0, 1, 2 atau 3). Bagaimana saya bisa mencapai tujuan saya?
2 jawaban
Anda dapat menggunakan list comprehension
. Di bawah ini adalah contohnya
lst = [['*', ' ', '*', '*', ' ', '*'],
['*', ' ', '*', ' ', 'B', '*'],
['*', '*', '*','*', '*', '*']]
replacements = {'*': 0, ' ': 1, 'A': 2, 'B': 3}
new_lst = [[replacements[i] for i in sublst] for sublst in lst]
# [[0, 1, 0, 0, 1, 0], [0, 1, 0, 1, 3, 0], [0, 0, 0, 0, 0, 0]]
Saat menetapkan karakter ke array, cobalah untuk mendapatkan nilai pengganti yang sesuai:
for index, line in enumerate(lines):
for i in range(0, len(line) - 1):
maze_array[index][i] = replacements.get(line[i], line[i])
dict.get
digunakan dengan nilai default sebagai karakter itu sendiri sehingga jika ditemukan karakter yang tidak ada penggantinya, program akan berjalan normal.