Sự khác nhau giữa 2 đoạn code Python sau là gì?
for range
: lặp qua từng chỉ số (index) từng phần tử. Muốn lấy giá trị thì phải dùng cú pháp lấy phần tử của mảng arr[i]
.
for in
: lặp trực tiếp qua từng giá trị (value) từng phần tử.
Ví dụ đơn giản:
a = 1
b = a
b = 2
# print(a, b)
nên ở VD2 L
không bị ảnh hưởng.
Vậy sao cái thứ 2 không bị ảnh hưởng vậy ạ?
Là sao ạ? a =1 b=a thì b =1 chứ ạ?
Mình nghĩ là có thể giúp bạn hiểu ra được vấn đề.
Ở phần bên trái (1).
Cái list (mảng) L
có 5 phần tử, các phần tử đó được đánh chỉ số từ 0
cho tới 4
.
Vậy, nếu ta ghi rõ ra, thì ta có 5 biến là
L[0] = 1
L[1] = 2
L[2] = 3
L[3] = 4
L[4] = 5
Và trong vòng lặp, ta lại mượn một biến khác là i
, có giá trị mỗi lần lặp là:
i = 0, L[i] = L[0] = bị thay đổi
và khi thay đổi, lại thay đổi cái biến L[i]
ấy.
Mà biến L[i]
lại liên hệ với mảng L
, nên đã có sự thay đổi
Nhưng ở bên phía phải (2), lại không như vậy
x = L[0] = 1
x = bị thay đổi
-----
x = L[1] = 2
x = bị thay đổi
Tuyệt nhiên, ta chẳng thấy có sự ảnh hưởng nào tới các biến L[0]
hay L[3]
gì cả. Nên sự thay đổi không được xảy ra giống như thử nghiệm ban đầu.
Chuyện này có quan trọng không?
Có nhiều khi, bạn muốn duyệt qua một mảng, một danh sách, một cái gì nhiều nhiều giá trị; bạn chỉ muốn lấy các giá trị ra để sử dụng thôi, vậy thì cách (2) sẽ là một cách để bạn có thể tham khảo.
Còn nếu, bạn muốn thay đổi những giá trị của cái gì nhiều nhiều giá trị; bạn có thể tham khảo cách (1). Thậm chí, nếu bạn chỉ muốn dùng để lấy giá trị, cách (1) vẫn sẽ là được sử dụng, giả dụ như:
x = L[i]
Nhưng như bạn thấy, điều này là chẳng cần thiết.
Để thực sự hiểu rõ nên dùng cái nào, mình nghĩ trải nghiệm cá nhân và sự học hỏi thêm sẽ giúp bạn có được câu trả lời vì còn nhiều thứ nữa. Mình chỉ có thể đưa ra cho bạn những điều đơn giản vậy thôi.
Mong rằng mình đã giúp bạn đã có câu trả lời.
for loop trong Python có dạng
for <biến> in <tập>:
<các câu lệnh trong vòng lặp>
Khi một lần lặp kết thúc, nếu <tập> còn phẩn tử, <biến> sẽ được gán bằng phần tử tiếp theo cho lần lặp kế tiếp.
Gán <biến> = <cái_gì_đó> trong vòng lặp, sẽ không thay đổi giá trị phần tử của <tập> mà chỉ là giá trị biến tạm thời đó, và cũng ko còn hiệu lực ở lần lặp sau.
Dạ em cảm ơn anh ạ. Giờ thì em hiểu rồi ạ.
Dạ em cảm ơn anh ạ. Cách giải thích của anh dễ hiểu quá ạ.