Hướng dẫn lambda vs for loop $ python - lambda so với vòng lặp $ python

Dưới đây là tốc độ của các phiên bản khác nhau trên máy tính xách tay MAC cũ:

$ py26 -mtimeit -s'domain = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]' 'sum[filter[lambda n : n % 2 == 0, domain]]'
100000 loops, best of 3: 4.41 usec per loop
$ py26 -mtimeit -s'domain = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]' 'sum[[n for n in domain if n % 2 == 0]]'
100000 loops, best of 3: 2.69 usec per loop
$ py26 -mtimeit -s'domain = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]' 'sum[n for n in domain if n % 2 == 0]'
100000 loops, best of 3: 2.86 usec per loop

Lưu ý rằng, trong khi phiên bản GenExp không nghi ngờ gì nữa, thì ListComp nhanh hơn một chút [có lẽ không đủ để lo lắng trừ khi mã này ở trong vòng lặp bên trong chặt chẽ mà bạn đang cố gắng tối ưu hóa SNOT ra khỏi ;-]. Như thường lệ, phiên bản dựa trên ____ 10 chậm hơn đáng kể, như những người khác đã đề cập-

a = [1, 2, 3, 4]
b = []
for x in a:
    b.append[x+1]
print[b]
# [2, 3, 4, 5]
0 là một loại "mối quan hệ kém" trong Python :-[.

Là một tốt hơn cái khác cho lập trình Python?

Ảnh của Thomas Nếm

Mọi người ngày nay đang bận rộn. Bạn và tôi đang bận. Mọi người đều bận cả. Ngay cả các lập trình viên cũng bận rộn. Nếu chúng tôi có thể viết toàn bộ chương trình chỉ trong một dòng mã, tôi đảm bảo với bạn rằng tất cả chúng tôi sẽ làm điều đó. Nhưng thật đáng buồn, một chương trình một dòng chỉ là không thể xảy ra.eople today are busy. You and I are busy. Everyone is busy. Even coders are busy. If we could write a whole program in just one line of code, I guarantee you that all of us would be doing it. But sadly, one line programs are just not probable.

Vấn đề: Cho một bộ sưu tập. Bạn muốn tạo một danh sách mới dựa trên tất cả các giá trị trong bộ sưu tập này. Mã sẽ chạy trong một dòng mã duy nhất. Làm thế nào để bạn thực hiện điều này? Bạn có cần một chức năng Lambda?: Given a collection. You want to create a new list based on all values in this collection. The code should run in a single line of code. How do you accomplish this? Do you need a lambda function?

Ví dụ: Cho một mảng

a = [1, 2, 3, 4]
b = []
for x in a:
    b.append[x+1]
print[b]
# [2, 3, 4, 5]
3. Bạn cần tạo một mảng thứ hai
a = [1, 2, 3, 4]
b = []
for x in a:
    b.append[x+1]
print[b]
# [2, 3, 4, 5]
4 với tất cả các giá trị của ________ 15, trong khi thêm
a = [1, 2, 3, 4]
b = []
for x in a:
    b.append[x+1]
print[b]
# [2, 3, 4, 5]
6 vào mỗi giá trị. Ở đây, nhiều người yêu thích của bạn:
: Given an array
a = [1, 2, 3, 4]
b = []
for x in a:
    b.append[x+1]
print[b]
# [2, 3, 4, 5]
3. You need to create a second array
a = [1, 2, 3, 4]
b = []
for x in a:
    b.append[x+1]
print[b]
# [2, 3, 4, 5]
4 with all values of
a = [1, 2, 3, 4]
b = []
for x in a:
    b.append[x+1]
print[b]
# [2, 3, 4, 5]
5—while adding
a = [1, 2, 3, 4]
b = []
for x in a:
    b.append[x+1]
print[b]
# [2, 3, 4, 5]
6 to each value. Here’s your multi-liner:

a = [1, 2, 3, 4]
b = []
for x in a:
    b.append[x+1]
print[b]
# [2, 3, 4, 5]

Làm thế nào để bạn hoàn thành điều này trong một dòng mã?

Trả lời: Không, bạn không cần một chức năng Lambda. Những gì bạn đang tìm kiếm là một tính năng gọi là Danh sách Hiểu. Ở đây, biểu thức một lớp lót hoàn thành điều này mà không có chức năng Lambda:: No, you don’t need a lambda function. What you’re looking for is a feature called list comprehension. Here’s the one-liner expression that accomplishes this without the lambda function:

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]

Bạn có thể tự mình thử ví dụ này trong Shell mã tương tác của chúng tôi:

Hãy cùng đi sâu vào một số thông tin cơ bản trong trường hợp bạn tự hỏi làm thế nào danh sách toàn diện hoạt động. Dựa trên câu hỏi của bạn, tôi cũng nghi ngờ rằng bạn không hoàn toàn hiểu các chức năng của Lambda, vì vậy tôi cũng sẽ thêm một phần khác về các chức năng Lambda. Cuối cùng, bạn cũng sẽ tìm hiểu về một phương pháp thay thế thứ ba để giải quyết vấn đề chính xác này bằng cách sử dụng hàm Lambda kết hợp với hàm bản đồ tích hợp Python [] Python,!

Vì vậy, hãy ở lại với tôi, bạn sẽ trở thành một lập trình viên tốt hơn trong quá trình! 🙂

Danh sách hiểu 101

Danh sách hiểu là một cách nhỏ gọn để tạo danh sách. Công thức đơn giản là

a = [1, 2, 3, 4]
b = []
for x in a:
    b.append[x+1]
print[b]
# [2, 3, 4, 5]
7.

  • Biểu thức: Phải làm gì với mỗi yếu tố danh sách?What to do with each list element?
  • Bối cảnh: Những yếu tố nào để chọn? Bối cảnh bao gồm một số lượng tùy ý của các câu
    a = [1, 2, 3, 4]
    b = []
    for x in a:
        b.append[x+1]
    print[b]
    # [2, 3, 4, 5]
    8 và
    a = [1, 2, 3, 4]
    b = []
    for x in a:
        b.append[x+1]
    print[b]
    # [2, 3, 4, 5]
    9.
    What elements to select? The context consists of an arbitrary number of
    a = [1, 2, 3, 4]
    b = []
    for x in a:
        b.append[x+1]
    print[b]
    # [2, 3, 4, 5]
    8 and
    a = [1, 2, 3, 4]
    b = []
    for x in a:
        b.append[x+1]
    print[b]
    # [2, 3, 4, 5]
    9 statements.

Ví dụ

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
0 tạo danh sách
b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
1.

Giới thiệu đơn giản về danh sách hiểu trong Python

Hãy xem đoạn mã mã tương tác sau đây có thể tìm ra những gì mà in ra vào vỏ không? Đi trước và nhấp vào Chạy Run để xem những gì xảy ra trong mã:

Tôi sẽ giải thích cả hai cách tạo ra một danh sách mới trong phần sau.

Ví dụ: Giả sử bạn muốn lọc tất cả khách hàng từ cơ sở dữ liệu của bạn, những người kiếm được hơn 1.000.000 đô la. Đây là những gì một người mới không biết danh sách hiểu sẽ làm:: Say you want to filter out all customers from your database who earn more than $1,000,000. This is what a newbie not knowing list comprehension would do:

# [name, $-income]
customers = [["John", 240000],
             ["Alice", 120000],
             ["Ann", 1100000],
             ["Zach", 44000]]

# your high-value customers earning 1000000:
        whales.append[customer]
print[whales]
# ['Ann']

Đoạn trích này cần bốn dòng chỉ để tạo ra một danh sách các khách hàng có giá trị cao [cá voi]!

Thay vào đó, một cách tốt hơn nhiều để làm điều tương tự là sử dụng danh sách hiểu:

whales = [x for x,y in customers if y>1000000]
print[whales]
# ['Ann']

Danh sách hiểu biết đơn giản khi bạn biết công thức.

Một danh sách hiểu biết bao gồm các dấu ngoặc chứa một biểu thức theo sau là một mệnh đề, sau đó không hoặc nhiều hơn cho hoặc nếu điều khoản. Kết quả sẽ là một danh sách mới do đánh giá biểu thức trong bối cảnh cho và nếu các điều khoản theo nó.

Tài liệu Python chính thức

Đây là công thức để hiểu danh sách. Đó là một điều bạn nên mang về nhà từ hướng dẫn này.

Công thức: Danh sách hiểu biết bao gồm hai phần.

‘[‘ + Biểu thức + Bối cảnh + ‘]

Phần đầu tiên là biểu thức. Trong ví dụ trên, nó là biến

b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
2. Nhưng bạn cũng có thể sử dụng một biểu thức phức tạp hơn như
b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
3. Sử dụng bất kỳ biến nào trong biểu thức của bạn mà bạn đã xác định trong ngữ cảnh trong một câu lệnh LOOP. Xem ví dụ này:
In the example above it was the variable
b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
2. But you can also use a more complex expression such as
b = [x+1 for x in a]
print[b]
# [2, 3, 4, 5]
3. Use any variable in your expression that you have defined in the context within a loop statement. See this example:

whales = [x.upper[] for x,y in customers if y>1000000]
print[whales]
# ['ANN']

Phần thứ hai là bối cảnh. Bối cảnh bao gồm một số lượng tùy ý cho và nếu các điều khoản. Mục tiêu duy nhất của bối cảnh là xác định [hoặc hạn chế] chuỗi các phần tử mà chúng tôi muốn áp dụng biểu thức. Đó là lý do tại sao đôi khi bạn thấy các hạn chế phức tạp như thế này:. The context consists of an arbitrary number of for and if clauses. The single goal of the context is to define [or restrict] the sequence of elements on which we want to apply the expression. That’s why you sometimes see complex restrictions such as this:

small_fishes = [x + str[y] for x,y in customers if y

Bài Viết Liên Quan

Chủ Đề