You are currently viewing BÀI TẬP DANH SÁCH TRONG PYTHON

BÀI TẬP DANH SÁCH TRONG PYTHON

Bài viết cung cấp cho các bạn lời giải cho một số bài toán về nội dung danh sách trong ngôn ngữ lập trình Python như sắp xếp danh sách, tìm phần tử lớn nhất, nhỏ nhất, chèn thêm phần tử vào danh sách, xóa phần tử khỏi danh sách, tìm đoạn con thỏa mãn điều kiện trong danh sách, …

Các bạn có thể xem thêm một số bài toán cơ bản của ngôn ngữ lập trình Python tại đây.

BÀI TOÁN

Cho danh sách a=[2, -4, 1, 9, -3, 6, 3, -2, 6, 8] gồm n=10 phần tử. 

Lưu ý:

  • Phần tử đầu tiên trong danh sách là a[0]=2, phần tử thứ 2 là a[1]=4, …
  • Phần tử cuối cùng của danh sách là a[-1] = a[9]=8, phần tử kề cuối là a[-2] = a[8] = 6, …

Yêu cầu:

Bài 1: Viết chương trình Python tính tổng các phần tử của danh sách

Bài 2: Viết chương trình Python đếm số lượng các số hạng dương và tổng của các số hạng dương.

Bài 3: Viết chương trình Python tính trung bình cộng của cả danh sách, trung bình cộng các phần tử dương trong danh sách.

Bài 4: Viết chương trình Python tìm vị trí của phần tử âm đầu tiên trong danh sách.

Bài 5: Viết chương trình Python tìm vị trí của phần tử dương cuối cùng trong danh sách.

Bài 6: Viết chương trình Python tìm phần tử lớn nhất của danh sách và vị trí phần tử lớn nhất cuối cùng.

Bài 7: Viết chương trình Python tìm phần tử lớn thứ nhì của danh sách và các vị trí của các phần tử đạt giá trị lớn nhì.

Bài 8: Viết chương trình Python tính số lượng các số dương liên tiếp nhiều nhất.

Bài 9: Viết chương trình Python tính số lượng các số dương liên tiếp có tổng lớn nhất.

Bài 10: Viết chương trình Python tính số lượng các phần tử liên tiếp đan dấu nhiều nhất (dãy phần tử liên tiếp được gọi là đan dấu nếu tích hai phần tử liên tiếp âm).

Bài 11: Viết chương trình Python tính số lượng các phần tử không tăng nhiều nhất.

Bài 12: Viết chương trình Python tìm vị trí bắt đầu đoạn con dương liên tiếp có nhiều phần tử nhất.

Bài 13: Viết chương trình Python tìm đoạn con có các số hạng dương liên tiếp có tổng lớn nhất. (Nếu có nhiều đoạn con thoả mãn thì đưa ra màn hình: Số đoạn con thoả mãn và các đoạn con đó).

Bài 14: Viết chương trình Python đếm số lượng các phần tử bằng giá trị X nhập từ bàn phím.

Bài 15: Viết chương trình Python chuyển các phần tử dương của danh sách lên đầu danh sách và in danh sách ra màn hình.

Bài 16: Viết chương trình Python tìm số phần tử là số nguyên tố của danh sách và vị trí của nó trong danh sách.

Bài 17: Viết chương trình Python chèn một số m (m nhập vào từ bàn phím ) vào đầu danh sách, cuối danh sách và vị trí thứ 5 của danh sách.

Bài 18: Viết chương trình Python chèn danh sách [1,2,3] vào vị trí đầu, cuối và thứ 5 của danh sách.

Bài 19: Viết chương trình Python xóa phần tử thứ k (k nhập từ bàn phím) trong danh sách.

    Bài 20. Viết chương trình Python sắp xếp danh sách theo thứ tự tăng dần, giảm dần.

    BÀI GIẢI

    # Bài 1. Tính tổng các phần tử của danh sách
    tong=0
    for i in range(0,n):
        tong+=a[i]
    print('Tổng =',tong)
    # Bài 2. Đếm số hạng dương và tổng các số dương
    dem=0
    tongd=0
    for i in range(0,n):
        if a[i]>0:
            dem+=1
            tongd+=a[i]
    print('Số hạng dương:',dem)
    print('Tổng số dương:',tongd)
    # Bài 3. Tính trung bình cộng cả danh sách, trung bình cộng các số dương
    tong=0
    for i in range(0,n):tong+=a[i]
    print('Trung bình cộng của danh sách:',tong)
    dem=0
    tongd=0
    for i in range(0,n):
        if a[i]>0:
            dem+=1
            tongd+=a[i]
    print('Trung bình cộng các số dương:',tongd/dem)
    # Bài 4. Tìm vị trí phần tử âm đầu tiên trong danh sách
    i=0
    while a[i]>=0:
        i+=1
        if i==n:
            break
    if i==n:
        print('Không có phần tử âm')
    else:
        print('Vị trí phần tử âm đầu tiên:',i+1)
    # Bài 5. Tìm vị trí phần tử dương cuối cùng trong danh sách
    i=n-1
    while a[i]<=0:
        i-=1
        if i==-1:
            break
    if i==-1:
        print('Không có phần tử dương')
    else:
        print('Vị trí phần tử dương cuối cùng:',i+1)
    # Bài 6. Tìm phần tử lớn nhất và vị trí của phần tử lớn nhất cuối cùng
    max=a[0]
    vt=0
    for i in range(1,n-1):
        if a[i]>max:
            max=a[i]
            vt=i
    print('Số lớn nhất là',max,'tại vị trí',vt+1)
    # Bài 7. Viết chương trình Python tìm phần tử lớn thứ nhì của danh sách và các vị trí của các phần tử đạt giá trị lớn nhì.
    #Cách 1:
    # Tìm số lớn nhất
    lonnhat = a[0]
    for n in a:
        if n > lonnhat:
            lonnhat = n
    # Tìm số lớn nhì
    lonnhi = float('-inf') # đặt số lớn nhì bằng âm vô cùng
    vtri = []
    for i, n in enumerate(a): # với mỗi chỉ số i và giá trị n của mỗi phần tử trong a
        if n > lonnhi and n < lonnhat:
            lonnhi = n
            vtri = [i+1]
        elif n == lonnhi:
            vtri.append(i+1)
    if len(vtri) == 0:
        print("Không có số lớn nhì.")
    else:
        print("Số lớn nhì là", lonnhi, "tại các vị trí:", vtri)
    
    #------------------------------------------------------
    # Cách 2:
    B=a.copy()
    m=max(B)
    i=0
    while i<len(B):
        if B[i]==m:
            B.remove(B[i])
            i-=1
        i+=1
    if len(B)==0:
        print("Khong co so lon nhi")
    else:
        m=max(B)
        print("So lon nhi la",m,"tai vi tri",end=" ")
        for i in range(len(a)):
            if a[i]==m:
                print(i+1,end=", ")
    #Bài 8. Số lượng các số dương liên tiếp nhiều nhất
    d=len(a)
    i=0
    maxd=0
    while i<d:
        if a[i]>0:
            max1=0
            j=i
            while a[j]>0:
                max1+=1
                j+=1
                if j==d: break
            if max1>maxd:
                maxd=max1
            i=j
        i+=1
    print('So duong lien tiep dai nhat =',maxd)
    #Bài 9. Tổng dương lớn nhất
    # Cách 1:
    d=len(a)
    i=0
    sumd=0
    while i<d:
        if a[i]>0:
            sum1=0
            j=i
            while a[j]>0:
                sum1+=a[j]
                j+=1
                if j==d: break
            if sum1>sumd:
                sumd=sum1
            i=j
        i+=1
    print('Tổng số dương liên tiếp lớn nhất =',sumd)
    #------------------------------------
    # Cách 2:
    tong_max = 0
    tong1 = 0
    for n in a:
        if n > 0:
            tong1 += n
        else:
            tong1 = 0
        if tong1 > tong_max:
            tong_max=tong1 
    if tong_max == 0:
        print("Không tìm thấy đoạn con có các số hạng dương liên tiếp.")
    else:
        print("Tổng đoạn con dương lớn nhất: ",tong_max)
    
    # Bài 10. Số lượng phần tử đan dấu dài nhất
    d=len(a)
    i=0
    maxdd=0
    for i in range(d-1):
        max1=0
        while a[i]*a[i+1]<0:
            max1+=1
            i+=1
            if i==d-1:break
        if max1>maxdd: maxdd=max1
    if maxdd>0: maxdd+=1
    print('Day so dan dau dai nhat =',maxdd)
    # Bài 11. Tính số lượng các phần tử không tăng nhiều nhất.
    count = 1
    max_count = 1
    for i in range(1, len(a)):
        if a[i] <= a[i-1]:
            count += 1
            max_count = max(max_count, count)
        else:
            count = 1
    print(max_count)
    # Bài 12. Tìm vị trí bắt đầu đoạn con dương liên tiếp có nhiều phần tử nhất.
    current_count = 0
    max_count = 0
    start_index = -1
    for i in range(len(a)):
        if a[i] > 0:
            current_count += 1
            if current_count > max_count:
                max_count = current_count
                start_index = i - max_count + 1
        else:
            current_count = 0
    print(start_index)
    #Bài 13. Tìm các đoạn con dương có tổng lớn nhất
    d=len(a)
    i=0
    sum_max=0
    vtri=[] # danh sách lưu vị trí bắt đầu các đoạn con dương có tổng lớn nhất
    while i<d:
        if a[i]>0:
            sum1=0
            j=i
            while a[j]>0:
                sum1+=a[j]
                j+=1
                if j==d: break
            if sum1>sum_max:
                sum_max=sum1
                vtri=[i]
            elif sum1==sum_max:
                vtri.append(i) 
            i=j
        i+=1
    if len(vtri)==0:
        print('Không có đoạn con dương')
    else:
        print('Các đoạn con dương có tổng lớn nhất là:')
        for i in vtri:
            while a[i]>0:
                print(a[i],end=' ')
                i+=1
                if i==d:
                    break
            print() 
    
    # Bài 14. Đếm số lượng phần tử bằng x
    x=float(input('Nhập 1 số từ bàn phím: '))
    dem=0
    for i in range(0,n):
        if a[i]==x:
            dem=dem+1
    print('Số lượng phần tử bằng',x,':',dem)
    #Bài 15
    ds_duong = []
    ds_am = []
    for i in a:
        if i >= 0:
            ds_duong.append(i)
        else:
            ds_am.append(i)
    ds_moi = ds_duong+ds_am
    print(ds_moi)
    #Bài 16
    # Tìm các số nguyên tố trong danh sách và in ra màn hình
    def so_nto(n):
        if n <= 1:
            return False
        for i in range(2, n//2+1):
            if n % i == 0:
                return False
        return True
    ds_nto = []
    for i in a:
        if so_nto(i):
            ds_nto.append(i)
    print("Danh sách số nguyên tố:", ds_nto)
    # Tìm vị trí của các số nguyên tố
    ds_vtri = []
    for i in range(len(a)):
        if so_nto(a[i]):
            ds_vtri.append(i)
    print("Vị trí số nguyên tố:", ds_vtri)
    # Bài 17. Chèn số m
    # Nhập danh sách từ bàn phím
    lst = input("Nhập danh sách các phần tử, cách nhau bằng dấu cách: ").split()
    # Nhập số cần chèn
    m = input("Nhập số cần chèn: ")
    # Chèn số vào đầu danh sách
    lst.insert(0, m)
    print("Danh sách sau khi chèn", m, "vào đầu danh sách là:")
    print(lst)
    # Chèn số vào cuối danh sách
    lst.append(m)
    print("Danh sách sau khi chèn", m, "vào cuối danh sách là:")
    print(lst)
    # Chèn số vào vị trí thứ 5 của danh sách
    if len(lst) >= 5:
        lst.insert(4, m)
        print("Danh sách sau khi chèn", m, "vào vị trí thứ 5 là:")
        print(lst)
    else:
        print("Danh sách không đủ dài để chèn vào vị trí thứ 5.")
    #Bài 18: 
    # Chèn danh sách vào vị trí đầu
    a = [1, 2, 3] + a
    print("Danh sách sau khi chèn vào vị trí đầu:", a)
    
    # Chèn danh sách vào vị trí cuối
    a = a + [1, 2, 3]
    print("Danh sách sau khi chèn vào vị trí cuối:", a)
    
    # Chèn danh sách vào vị trí thứ 5
    a = a[:4] + [1, 2, 3] + a[4:]
    print("Danh sách sau khi chèn vào vị trí thứ 5:", a)
    # Bài 19. Xóa phần tử thứ k
    # Nhập danh sách từ bàn phím
    lst = input("Nhập danh sách các phần tử, cách nhau bằng dấu cách: ").split()
    # Nhập chỉ số phần tử cần xóa
    k = int(input("Nhập chỉ số phần tử cần xóa (bắt đầu từ 0): "))
    # Kiểm tra nếu chỉ số k nằm trong phạm vi của danh sách
    if k >= 0 and k < len(lst):
        # Xóa phần tử tại chỉ số k
        del lst[k]
        print("Danh sách sau khi xóa phần tử thứ", k, "là:")
        print(lst)
    else:
        print("Chỉ số phần tử cần xóa không hợp lệ.")
    # Bài 20. Sắp xếp danh sách tăng dần, giảm dần
    #Sắp xếp danh sách tăng
    for i in range(0,n-1):
        for j in range(i+1,n):
            if a[i]>a[j]:
                t=a[i]
                a[i]=a[j]
                a[j]=t
    print('Danh sách đã sắp xếp tăng:')
    print(a)
    #Sắp xếp danh sách giảm
    for i in range(0,n-1):
        for j in range(i+1,n):
            if a[i]<a[j]:
                t=a[i]
                a[i]=a[j]
                a[j]=t
    print('Danh sách đã sắp xếp giảm:')
    print(a)

    This Post Has 8 Comments

    1. Khách

      câu 1 có thể thay bằng hàm sum() cho đơn giản

    2. Khách

      câu 20 chỉ cần a.sort() là x, nguyên đoạn code chỉ cần 3 dòng =))))))))

    Trả lời