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, indexvalue đề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?