Thay đổi value của list trong python

Hi mọi người, mình có một câu hỏi vè python thế nafy:

khi mình thực hiện đoạn code sau:

a = [1,2,3,4,5]

for i in a:
    i = i+1

Tại sao đoạn lệnh tren không thay đổi giá trị các phần tử trong list a. Mình có xem họ nói về iterator gì đấy, mình đọc mà thực sự không cả thấy hiểu lắm.

Cảm ơn mọi người

Bạn không thể chuyển tham chiếu ở trong a đi nơi khác, nhưng bạn có thể thay cái nó đang trỏ vào.

3 Likes

Mình chưa hiểu ý bạn lắm, ý mình là tại sao mình không thể thay đổi giá trị của các phần tử khi loop qua cái list a nhỉ.

Mình thấy call by value với call by reference ở C/C++ dễ hiểu hơn nhiều, nếu có thể bạn google thử dù sao cũng là căn bản của lập trình. Ở python thì tất cả mọi cái là object, object thì có cái có thể thay đổi cái ko thể thay đổi. ở đây number là ko dc thay đổi. kiểu như mấy cái số đấy là object của python rồi bạn ko thể làm dc gì nữa. Mỗi lần bạn gán giá trị vào biến chỉ là trỏ biến của bạn đến object đó thôi. Nếu bạn thay đổi cái biến của bạn thì nó chỉ trỏ đến cái giá trị khác. Vì thế cái loop của bạn đang cố gắng thay đổi thứ ko thể thay đổi.
Có thể viết

for i, value in enumerate(a):
     a[i] += 1

code này thì có nghĩa là trỏ cái a[i] của bạn đến giá trị mới.
ko biết mình hiểu đúng hay sai. hóng cao nhân vào giải đáp

3 Likes

V nhìn đây bạn hiểu k. :kissing:

a = [[1], [2], [3], [4]]
print(a)
for i in a:
    i[0] += 1
print(a)
[[1], [2], [3], [4]]
[[2], [3], [4], [5]]
3 Likes
a = [1,2,3,4,5]

print('Đây là list nguyên gốc:')
print(a)

# Lấy tổng số item có trong list a
count_list_a = len(a)

print('\nBây giờ sẽ duyệt từng item trong cái list:\n')
for i in range(count_list_a):

    print('Item ở vị trí index ' + str(i) + ' hiện tại có giá trị là ' + str(a[i]))
    print('Bây giờ sẽ thêm chữ "daynhauhoc" vào phía sau thằng này\n')


    # Lấy giá trị của item tại vị trí index (i) của, sau đó thay đổi giá trị của nó
    # Phải là a[i] thì mới là giá trị CỦA ITEM BÊN TRONG LIST 
    a[i] = 'daynhauhoc_' + str(i)

print('Đây là list mới:')
print(a)

Output:

Đây là list nguyên gốc:
[1, 2, 3, 4, 5]

Bây giờ sẽ duyệt từng item trong cái list:

Item ở vị trí index 0 hiện tại có giá trị là 1
Bây giờ sẽ thêm chữ “daynhauhoc” vào phía sau thằng này

Item ở vị trí index 1 hiện tại có giá trị là 2
Bây giờ sẽ thêm chữ “daynhauhoc” vào phía sau thằng này

Item ở vị trí index 2 hiện tại có giá trị là 3
Bây giờ sẽ thêm chữ “daynhauhoc” vào phía sau thằng này

Item ở vị trí index 3 hiện tại có giá trị là 4
Bây giờ sẽ thêm chữ “daynhauhoc” vào phía sau thằng này

Item ở vị trí index 4 hiện tại có giá trị là 5
Bây giờ sẽ thêm chữ “daynhauhoc” vào phía sau thằng này

Đây là list mới:
[‘daynhauhoc_0’, ‘daynhauhoc_1’, ‘daynhauhoc_2’, ‘daynhauhoc_3’, ‘daynhauhoc_4’]
[Finished in 0.6s]

3 Likes
a = [1,2,3,4,5]
#print(a)
for i in range(len(a)):
    a[i] =  a[i] + 1
#print(a)

[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
[Finished in 0.3s]

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