Vòng lặp for in này trong python hoạt động như thế nào?

Xin chào
Mình có chút thắc mắc với for in trong python

x = [0,1,2,3]
for x[-1] in x:
   print(x)

thường ta dùng

x = [1,2,3]
for i in x:
     do somthing

hoặc

x = [1,2,3]
if 1 in x:
     do something

nhưng ở trên chỗ dùng x[-1] ở đây mình không hiểu lắm. kết quả rất magic :smile:

Xin cảm ơn

1 Like

Đúng là MAGIC thật :joy: :rofl:
Lót dép chờ cao nhân giải thích

1 Like

Đơn giản là nó sẽ lặp 4 lần
x[-1] có nghĩa là phần tử cuối cùng.

Lần đầu tiên thì x[-1] = x[0] = 0 (mảng là [0,1,2,0])
Lần thứ 2 thì x[-1] = x[1] = 1 (mảng là [0,1,2,1])
Lần thứ 3 thì x[-1] = x[2] = 2 (mảng là [0,1,2,2])
Lần thứ 4 thì x[-1] = x[3] = 2 (mảng là [0,1,2,2])

1 Like

x[3] = 3 mà ta?
Nhìn kết quả thì có thể đoán na ná được, nhưng mình muốn hỏi cụ thể ở dòng for a[-1] in a đã làm gì ấy
Bình thườngfor i in a thì i ở đây sẽ là các obj, lần lượt trỏ vào từng vị trí trong a
Còn giờ viết thành for a[-3] in a mình hơi khó hiểu chỗ này

Mình nghĩ bạn VuVanChung trả lời đúng rồi. Mình chỉ có 1 comment nho nhỏ như sau:

  1. Gần như mọi thứ trong Python đều là mutable (trừ một số immutable - tuple, frozenset,…) và trong câu hỏi của bạn thì biến x là một mutable object.

  2. Trong vòng lặp for, giá trị index (value) sẽ được thực hiện phép gán. Tổng quan hơn với iterable objects, index và value đều là mutable objects:

    In [1]: x = [10, 20, 30]
    
    In [2]: for a, b in enumerate(x):
       ...:     a += 1
       ...:     b += -1
       ...:     print(a, b)
       ...:     
    1 9
    2 19
    3 29
    
    

Trong câu hỏi của bạn, index ở đây lại chính là phần tử của list x, và phần tử đó cũng được thực hiện phép gán. Ví dụ ở vòng lặp đầu tiên:

for x[-1] in x:  # x = [0, 1, 2, 3]

Python interpreter sẽ thực hiện gán x[-1] = 0, và x khi đó thành: [0, 1, 2, 0], và thực hiện vòng lặp tiếp theo. Ở vòng lặp cuối, x = [0, 1, 2, 2] vì ở vòng lặp trước x[-1] = 2.

2 Likes

Tks bạn. Mình đã hiểu

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?