01/10/2018, 15:56

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.
HK boy viết 18:08 ngày 01/10/2018

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:
    ...
nguyen tan phat viết 17:56 ngày 01/10/2018

ý 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

HK boy viết 18:11 ngày 01/10/2018

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.

nguyen tan phat viết 17:59 ngày 01/10/2018

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

HK boy viết 18:09 ngày 01/10/2018

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.

nguyen tan phat viết 18:02 ngày 01/10/2018

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

HK boy viết 18:11 ngày 01/10/2018

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:
            ...
nguyen tan phat viết 18:03 ngày 01/10/2018

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

Bài liên quan
0