01/10/2018, 10:12
Vấn đề với For loop và remove function in python
Đoạn code của mình như sau:
print """data = [1, 2, 3, "nam sau bay", 8]
test = ["bay", 8, 9, 10, "muoi mot"]
sumboth = data + test
"""
data = [1, 2, 3, "nam sau bay", 8]
test = ["Bay", 8, 9, 10, "muoi mot"]
sumboth = data + test
# kiểm tra điều kiện if và in biến trong data và test
for da in data:
if da > 0:
print da,
print
for te in test:
if te > 0:
print te,
print
# chạy điều kiện if với remove
for da in data:
if da > 0:
data.remove(da)
for te in test:
if te > 0:
test.remove(te)
for su in sumboth:
if su > 0:
sumboth.remove(su)
print
print "in data: ", data
print "in test: ", test
print "in sum: ", sumboth
mình không hiểu sao python cho ra kết quả kì lạ như vậy.
Bài liên quan
Bạn vừa duyệt từng phần tử trong mảng và đồng thời remove phần tử trong mảng, nó làm thay đổi vị trí nên gây ra kết quả sai lệch. Để ý thì dễ thấy được:
data = [1, 2, 3, "nam sau bay", 8]
==(removed)==>data = [<removed>, 2, <removed>, "nam sau bay", <removed>]
, tức là còndata = [2, "nam sau bay"]
Lý do nôm na để giải thích là bên trong Python vẫn lấy phần tử ra bằng cách tăng chỉ số, xóa 1 phần tử ở vị trí hiện tại sẽ làm phần tử kế tiếp bị đẩy xuống và bị bỏ qua.
cảm ơn bạn nhiều. Để mình fix đoạn code lại