thắc mắc Gà python không hiểu code

E ko hiểu lắm đoạn code này, yêu cầu là có 1 danh sách các số, bắt đầu từ số thứ nhất thì cộng với số thứ 2, sau đó trừ số thứ 3 và lặp đi lặp lại rồi trả về tổng.
Ví dụ: [1,2,3,4,5,6] sẽ là 1 + 2 - 3 + 4 - 5 + 6 = 5

Code

Python:
def cong_tru(danhsach):
    tong = danhsach.pop(0)
    while danhsach:
        tong += danhsach.pop(0)
        if danhsach:
            tong -= danhsach.pop(0)
    return tong
 
1. tổng = lấy phần từ đầu tiên của mảng (và xóa luôn phần từ đó khỏi mảng) (hàm pop()) (1)
2. lặp danh sách cho tới khi hết: tổng = (1) + với phần tử tiếp theo được pop trong mảng (2)
3. nếu danh sách mà còn phần tử từ thì tổng = tổng -(2)
4. while nên lặp lại bước 2

Diễn giải thì là thế, bạn k hiểu ở đâu?
 
Cảm ơn bác, e hiểu rồi ạ.
Lúc đầu e ko hiểu lắm chỗ if, vì ko biết sao mà từ if lại quyết định đc là trừ pop(0), hóa ra là + - nó theo thứ tự và nằm trong 1 lượt loop.
 
Cảm ơn bác, e hiểu rồi ạ.
Lúc đầu e ko hiểu lắm chỗ if, vì ko biết sao mà từ if lại quyết định đc là trừ pop(0), hóa ra là + - nó theo thứ tự và nằm trong 1 lượt loop.
cái if để tránh việc anh pop ra 1 phần tử trong khi list đã hết phần tử. Nếu List của anh gồm n phần tử với n là số lẻ thì ko có cái if đó nó vẫn chạy được thôi.
 
E ko hiểu lắm đoạn code này, yêu cầu là có 1 danh sách các số, bắt đầu từ số thứ nhất thì cộng với số thứ 2, sau đó trừ số thứ 3 và lặp đi lặp lại rồi trả về tổng.
Ví dụ: [1,2,3,4,5,6] sẽ là 1 + 2 - 3 + 4 - 5 + 6 = 5

Code
Code nó phải thế này fen ạ
Python:
sum([value*pow(-1, index%2+1) for index, value in enumerate(danhsach)])+2*danhsach[0]
 
biết gì về python ko mà phán :amazed:
xài hàm pow là thấy ngu rồi
uq1dgnk.png


Python:
danhsach[0] + sum(danhsach[1::2]) - sum(danhsach[2::2])

nhóe
ZqKVMGG.gif
 
Sửa lần cuối:
Thêm câu nữa ạ

Python:
def mophong_zip(*args):
    return [tuple(element[index] for element in args)
            for index in range(len(min(args, key=len)))]

print(mophong_zip([10, 20,30], 'abc'))
Output:
[(10, 'a'), (20, 'b'), (30, 'c')]

Cái này chuyển về 2 loop để ra kết quả tương tự như nào ạ? Sao e toàn bị lỗi not iterable.
Python:
def mophong_zip(*args):
    for index in range(len(min(args, key=len):
        for element in args:
            return [tuple(element[index]]
 
Thêm câu nữa ạ

Python:
def mophong_zip(*args):
    return [tuple(element[index] for element in args)
            for index in range(len(min(args, key=len)))]

print(mophong_zip([10, 20,30], 'abc'))
Output:
[(10, 'a'), (20, 'b'), (30, 'c')]

Cái này chuyển về 2 loop để ra kết quả tương tự như nào ạ? Sao e toàn bị lỗi not iterable.
Python:
def mophong_zip(*args):
    for index in range(len(min(args, key=len):
        for element in args:
            return [tuple(element[index]]
cái tuple() của anh bị sai, argument của nó phải là 1 cái iterable object (list) mà cái element[index] anh đang chỉ tới là 1 cái int. Cụ thể lần đầu tiên anh chạy thì cái vòng lập của anh sẽ duyệt qua cái argument [10,20,30] và index bằng 0 => element[index] = phần tử 10. Nếu anh muốn nó chạy được thì anh đóng 1 giấu ngoặc vuông ngay trong element[index] như này return [tuple([element[index]])] nhưng kết quả thu được sẽ sai :big_smile::big_smile:
Tôi ko rành python lắm nên làm thô thiển như này
Python:
def mophong_zip(*args):
    temp_list = []
    result = []
    for index in range(len(min(args, key=len))):
        for arr in args:
            temp_list.append(arr[index])
        temp_tuple = tuple(temp_list)  # optional
        result.append(temp_tuple)  # can be replaced by templist
        temp_list.clear()
    return result
 
Hay quá Cụ ơi :sexy_girl:
Phải công nhận thằng list comprehension hay ghê, nhưng sao nó lại giúp loại bỏ đc temp_list.append(arr[index]) đc nhỉ?
 
Sửa lần cuối:
Hay quá Cụ ơi :sexy_girl:
Phải công nhận thằng list
Hay quá Cụ ơi :sexy_girl:
Phải công nhận thằng list comprehension hay ghê, nhưng sao nó lại giúp loại bỏ đc temp_list.append(arr[index]) đc nhỉ?

hay ghê, nhưng sao nó lại giúp loại bỏ đc temp_list.append(arr[index]) đc nhỉ?
Tôi không biết nhưng tôi nghĩ ở dưới nó cũng chạy kiểu tạo ra cái list rồi append vào thôi, ở trên sửa lại syntax cho tiện thôi.:big_smile:
 
Hay quá Cụ ơi :sexy_girl:
Phải công nhận thằng list comprehension hay ghê, nhưng sao nó lại giúp loại bỏ đc temp_list.append(arr[index]) đc nhỉ?
Cái list comprehensions nó là dạng syntactic sugar thôi, bên dưới nó vẫn build 1 list rồi append item.

Python:
import dis

dis.dis('[item for item in []]')

Sẽ thấy nó vẫn xài opcode LIST_APPEND
Mã:
  1           0 BUILD_LIST               0
              2 LOAD_FAST                0 (.0)
        >>    4 FOR_ITER                 8 (to 14)
              6 STORE_FAST               1 (item)
              8 LOAD_FAST                1 (item)
             10 LIST_APPEND              2
             12 JUMP_ABSOLUTE            4
        >>   14 RETURN_VALUE
 
E ko hiểu lắm đoạn code này, yêu cầu là có 1 danh sách các số, bắt đầu từ số thứ nhất thì cộng với số thứ 2, sau đó trừ số thứ 3 và lặp đi lặp lại rồi trả về tổng.
Ví dụ: [1,2,3,4,5,6] sẽ là 1 + 2 - 3 + 4 - 5 + 6 = 5

Code
def cong_tru(ds):
return sum(ds[x] if x%2 or x<2 else -ds[x] for x in range(len(ds)))

Viết ngắn gọn vậy cho dễ hiểu.
 

Thống kê chủ đề

Ngày tạo
Nghe Si Chu Van Quyenh,
Người trả lời cuối
thuyduong2007,
Trả lời
20
Lượt xem
2.147
Quay lại
Lên đầu trang