So sánh phần tử trong list

Mình có dòng code như sau:

for n in listSV:
        for m in listSVTKB:
            for l in listMH:
                if n in m:
                    if m+1 in n and l+2 == 2:
                        stcID = stcID + 1

Lỗi:

if m+1 in n and l+2 == 1:
TypeError: must be str, not int

-listSV, listSVTKB, listMH là các list chứa các phần tử.

  • cho m là phần tử thứ 0 trong listSVTKB mình muốn lấy phần tử thứ 1 tức m+1 và so sánh xem nó có nằm trong listSV và so sánh phần tử l+2 có bằng 1 hay không thì mình phải code như thế nào cho đúng mong mọi người giúp đỡ. Cảm ơn mọi người đã đọc bài viết.

Không phải lúc nào cũng cần dùng for loop with iterator. Hãy dùng indexing, vì nó thật sự hữu hiệu khi cần tìm phần tử sau nó 1, 2 phần tử.

Bạn có thể cho ví dụ được không?

Theo code của bạn, mình demo bừa thử:

if listSVTKB[1] in listSV and listMH[...] == 1:
    ...
4 Likes

ý mình muốn là nếu có bất kì phần tử nào trong listSV có ở trong listSVTKB thì mình muốn lấy phần tử tiếp theo của phần tử ấy.vd như trong java chỉ cần list.get(x+1) mình chỉ cần +1 là có dc vị trí tiếp theo của x nhưng trong python mình không biết phải code s

Dùng for loop index của mảng thôi. Dùng hàm tìm kiếm theo iterator rất lâu.

for m in range(len(listSVTKB)):
    for l in range(len(listMH)):
        if listSVTKB[m+1] in n and listMH[l+2] == 1:
            ...

Góp ý với bạn, là bạn hãy đặt những tên biến có nghĩa như soSV, maSV,… thay vì những tên vô nghĩa như n, m, l, rất khó debug.

2 Likes

mình có search tren stackoverflow sửa lại sử dụng theo index thì nó báo lỗi mới như này
if listSVTKB[m+1] in listMH[l] and listMH[l+2] == 1:
IndexError: list index out of range

Thì bạn phải chặn index xem chạy đến bao nhiêu là đủ. m == len(listSVTKB) - 1 thì làm sao có phần tử listSVTKB[m+1]? Tương tự với trường hợp listMH.

3 Likes

mình chưa biết cách chặn bằng python bạn có thể chỉ giáo

Thêm 1 chút vào range thôi chứ có gì đâu.

for m in range(len(listSVTKB)-1):
    for l in range(len(listMH)-2):
        if listSVTKB[m+1] in n and listMH[l+2] == 1:
            ...
3 Likes

mình chạy được rồi tks bạn nhiều. Mong bạn chỉ giáo thêm nữa.

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