Bẻ khóa cuộc phỏng vấn mã hóa Python

Bạn đã hoàn thành cuộc gọi điện thoại với nhà tuyển dụng và giờ là lúc thể hiện rằng bạn biết cách giải quyết vấn đề với mã thực tế. Cho dù đó là bài tập HackerRank, bài tập về nhà hay cuộc phỏng vấn trên bảng trắng tại chỗ, đây là thời điểm để bạn chứng minh kỹ năng phỏng vấn lập trình của mình

Show

Nhưng các cuộc phỏng vấn không chỉ là giải quyết vấn đề. họ cũng muốn chứng minh rằng bạn có thể viết mã sản xuất sạch. Điều này có nghĩa là bạn có kiến ​​thức sâu rộng về các thư viện và chức năng tích hợp sẵn của Python. Kiến thức này cho các công ty thấy rằng bạn có thể di chuyển nhanh chóng và sẽ không sao chép chức năng đi kèm với ngôn ngữ chỉ vì bạn không biết nó tồn tại

Ghi chú. Để có cảm nhận về một cuộc phỏng vấn lập trình có thể diễn ra như thế nào và để tìm hiểu các phương pháp hay nhất cho các thử thách viết mã, hãy xem khóa học video Viết và kiểm tra hàm Python. Thực hành phỏng vấn

Tại Real Python, chúng tôi đã cùng nhau thảo luận và thảo luận về những công cụ mà chúng tôi luôn ấn tượng khi thấy trong các cuộc phỏng vấn viết mã. Bài viết này sẽ hướng dẫn bạn cách tốt nhất về chức năng đó, bắt đầu với Python tích hợp sẵn, sau đó là hỗ trợ gốc của Python cho cấu trúc dữ liệu và cuối cùng là thư viện chuẩn mạnh mẽ (và thường bị đánh giá thấp) của Python

Trong bài viết này, bạn sẽ học cách

  • Sử dụng
    >>> numbers = [45, 22, 14, 65, 97, 72]
    >>> for i, num in enumerate(numbers, start=52):
    ..     print(i, num)
    ...
    52 45
    53 22
    54 14
    55 65
    56 97
    57 72
    
    7 để lặp lại cả chỉ số và giá trị
  • Gỡ lỗi mã có vấn đề với
    >>> numbers = [45, 22, 14, 65, 97, 72]
    >>> for i, num in enumerate(numbers, start=52):
    ..     print(i, num)
    ...
    52 45
    53 22
    54 14
    55 65
    56 97
    57 72
    
    8
  • Định dạng chuỗi hiệu quả với chuỗi f
  • Sắp xếp danh sách với các đối số tùy chỉnh
  • Sử dụng trình tạo thay vì hiểu danh sách để tiết kiệm bộ nhớ
  • Xác định các giá trị mặc định khi tra cứu các khóa từ điển
  • Đếm các đối tượng có thể băm với lớp
    >>> numbers = [45, 22, 14, 65, 97, 72]
    >>> for i, num in enumerate(numbers, start=52):
    ..     print(i, num)
    ...
    52 45
    53 22
    54 14
    55 65
    56 97
    57 72
    
    9
  • Sử dụng thư viện chuẩn để nhận danh sách hoán vị và kết hợp

Tiền thưởng miễn phí. 5 Suy nghĩ về Làm chủ Python, một khóa học miễn phí dành cho các nhà phát triển Python cho bạn thấy lộ trình và tư duy mà bạn sẽ cần để đưa các kỹ năng Python của mình lên một tầm cao mới

Chọn chức năng tích hợp phù hợp cho công việc

Python có một thư viện tiêu chuẩn lớn nhưng chỉ có một thư viện nhỏ chứa các hàm dựng sẵn, luôn có sẵn và không cần phải nhập. Bạn nên xem qua từng chức năng, nhưng cho đến khi bạn có cơ hội thực hiện, đây là một số chức năng tích hợp sẵn đáng để hiểu cách sử dụng và trong trường hợp của một số chức năng đó, bạn nên sử dụng những giải pháp thay thế nào

Loại bỏ các quảng cáo

Lặp lại với >>> numbers = [45, 22, 14, 65, 97, 72] >>> for i, num in enumerate(numbers, start=52): .. print(i, num) ... 52 45 53 22 54 14 55 65 56 97 57 72 7 thay vì >>> numbers = [4, 2, 1, 6, 9, 7] >>> def square(x): .. return x*x ... >>> list(map(square, numbers)) [16, 4, 1, 36, 81, 49] >>> [square(x) for x in numbers] [16, 4, 1, 36, 81, 49] 1

Kịch bản này có thể xuất hiện nhiều hơn bất kỳ kịch bản nào khác trong các cuộc phỏng vấn viết mã. bạn có một danh sách các phần tử và bạn cần lặp lại danh sách với quyền truy cập vào cả chỉ số và giá trị

Có một câu hỏi phỏng vấn mã hóa cổ điển tên là FizzBuzz có thể được giải bằng cách lặp qua cả chỉ số và giá trị. Trong FizzBuzz, bạn được cung cấp một danh sách các số nguyên. Nhiệm vụ của bạn là làm như sau

  1. Thay thế tất cả các số nguyên chia hết cho
    >>> numbers = [4, 2, 1, 6, 9, 7]
    >>> def square(x):
    ..     return x*x
    ...
    >>> list(map(square, numbers))
    [16, 4, 1, 36, 81, 49]
    
    >>> [square(x) for x in numbers]
    [16, 4, 1, 36, 81, 49]
    
    2 bằng
    >>> numbers = [4, 2, 1, 6, 9, 7]
    >>> def square(x):
    ..     return x*x
    ...
    >>> list(map(square, numbers))
    [16, 4, 1, 36, 81, 49]
    
    >>> [square(x) for x in numbers]
    [16, 4, 1, 36, 81, 49]
    
    3
  2. Thay thế tất cả các số nguyên chia hết cho
    >>> numbers = [4, 2, 1, 6, 9, 7]
    >>> def square(x):
    ..     return x*x
    ...
    >>> list(map(square, numbers))
    [16, 4, 1, 36, 81, 49]
    
    >>> [square(x) for x in numbers]
    [16, 4, 1, 36, 81, 49]
    
    4 bằng
    >>> numbers = [4, 2, 1, 6, 9, 7]
    >>> def square(x):
    ..     return x*x
    ...
    >>> list(map(square, numbers))
    [16, 4, 1, 36, 81, 49]
    
    >>> [square(x) for x in numbers]
    [16, 4, 1, 36, 81, 49]
    
    5
  3. Thay thế tất cả các số nguyên chia hết cho cả
    >>> numbers = [4, 2, 1, 6, 9, 7]
    >>> def square(x):
    ..     return x*x
    ...
    >>> list(map(square, numbers))
    [16, 4, 1, 36, 81, 49]
    
    >>> [square(x) for x in numbers]
    [16, 4, 1, 36, 81, 49]
    
    2 và
    >>> numbers = [4, 2, 1, 6, 9, 7]
    >>> def square(x):
    ..     return x*x
    ...
    >>> list(map(square, numbers))
    [16, 4, 1, 36, 81, 49]
    
    >>> [square(x) for x in numbers]
    [16, 4, 1, 36, 81, 49]
    
    4 bằng
    >>> numbers = [4, 2, 1, 6, 9, 7]
    >>> def square(x):
    ..     return x*x
    ...
    >>> list(map(square, numbers))
    [16, 4, 1, 36, 81, 49]
    
    >>> [square(x) for x in numbers]
    [16, 4, 1, 36, 81, 49]
    
    8

Thông thường, các nhà phát triển sẽ giải quyết vấn đề này với

>>> numbers = [4, 2, 1, 6, 9, 7]
>>> def square(x):
..     return x*x
...
>>> list(map(square, numbers))
[16, 4, 1, 36, 81, 49]

>>> [square(x) for x in numbers]
[16, 4, 1, 36, 81, 49]
1

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i in range(len(numbers)):
..     if numbers[i] % 3 == 0 and numbers[i] % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif numbers[i] % 3 == 0:
..         numbers[i] = 'fizz'
..     elif numbers[i] % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']

Phạm vi cho phép bạn truy cập các phần tử của

>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
0 theo chỉ mục và là một công cụ hữu ích trong một số trường hợp. Nhưng trong trường hợp này, khi bạn muốn nhận chỉ số và giá trị của từng phần tử cùng một lúc, một giải pháp tinh tế hơn sẽ sử dụng
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72
7

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']

Đối với mỗi phần tử,

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72
7 trả về một bộ đếm và giá trị phần tử. Bộ đếm mặc định là
>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
3, thuận tiện cũng là chỉ mục của phần tử. Bạn không muốn bắt đầu đếm từ ngày
>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
3?

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72

Bằng cách sử dụng tham số

>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
5, chúng tôi truy cập tất cả các phần tử giống nhau, bắt đầu với chỉ mục đầu tiên, nhưng bây giờ số lượng của chúng tôi bắt đầu từ giá trị số nguyên đã chỉ định

Sử dụng Danh sách Hiểu thay vì >>> def is_odd(x): .. return bool(x % 2) ... >>> list(filter(is_odd, numbers)) [1, 9, 7] >>> [x for x in numbers if is_odd(x)] [1, 9, 7] 7 và >>> def is_odd(x): .. return bool(x % 2) ... >>> list(filter(is_odd, numbers)) [1, 9, 7] >>> [x for x in numbers if is_odd(x)] [1, 9, 7] 8

“Tôi nghĩ việc loại bỏ bộ lọc() và bản đồ() là điều không gây tranh cãi[. ]”

— Guido van Rossum, người tạo ra Python

Anh ấy có thể đã sai khi cho rằng nó không gây tranh cãi, nhưng Guido có lý do chính đáng để muốn xóa

>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
7 và
>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
8 khỏi Python. Một lý do là Python hỗ trợ khả năng hiểu danh sách, thường dễ đọc hơn và hỗ trợ chức năng tương tự như
>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
7 và
>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
8

Trước tiên, hãy xem cách chúng ta cấu trúc một cuộc gọi đến

>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
7 và cách hiểu danh sách tương đương

>>>

>>> numbers = [4, 2, 1, 6, 9, 7]
>>> def square(x):
..     return x*x
...
>>> list(map(square, numbers))
[16, 4, 1, 36, 81, 49]

>>> [square(x) for x in numbers]
[16, 4, 1, 36, 81, 49]

Cả hai cách tiếp cận, sử dụng

>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
7 và cách hiểu danh sách, đều trả về các giá trị giống nhau, nhưng cách hiểu danh sách dễ đọc và dễ hiểu hơn

Bây giờ chúng ta có thể làm điều tương tự cho

>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
8 và cách hiểu danh sách tương đương của nó

>>>

>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]

Giống như chúng ta đã thấy với

>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
7, cách tiếp cận hiểu danh sách và
>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
8 trả về cùng một giá trị, nhưng cách hiểu danh sách dễ theo dõi hơn

Các nhà phát triển đến từ các ngôn ngữ khác có thể không đồng ý rằng việc hiểu danh sách dễ đọc hơn

>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
7 và
>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
8, nhưng theo kinh nghiệm của tôi, những người mới bắt đầu có thể hiểu được danh sách một cách trực quan hơn nhiều

Dù bằng cách nào, bạn sẽ hiếm khi mắc lỗi khi sử dụng khả năng hiểu danh sách trong một cuộc phỏng vấn viết mã, vì nó sẽ truyền đạt rằng bạn biết điều gì phổ biến nhất trong Python

Loại bỏ các quảng cáo

Gỡ lỗi với >>> numbers = [45, 22, 14, 65, 97, 72] >>> for i, num in enumerate(numbers, start=52): .. print(i, num) ... 52 45 53 22 54 14 55 65 56 97 57 72 8 thay vì import pdb; pdb.set_trace() 1

Bạn có thể đã gỡ lỗi một vấn đề nhỏ bằng cách thêm

import pdb; pdb.set_trace()
1 vào mã của mình và xem nội dung được in ra. Cách tiếp cận này hoạt động tốt lúc đầu nhưng nhanh chóng trở nên cồng kềnh. Ngoài ra, trong môi trường phỏng vấn viết mã, bạn hầu như không muốn các cuộc gọi
import pdb; pdb.set_trace()
1 xuất hiện trong mã của bạn

Thay vào đó, bạn nên sử dụng trình gỡ lỗi. Đối với các lỗi không tầm thường, hầu như luôn nhanh hơn so với sử dụng

import pdb; pdb.set_trace()
1 và do việc gỡ lỗi là một phần quan trọng trong quá trình viết phần mềm, điều đó cho thấy bạn biết cách sử dụng các công cụ cho phép bạn phát triển nhanh chóng trong công việc

Nếu bạn đang sử dụng Python 3. 7, bạn không cần nhập bất cứ thứ gì và chỉ có thể gọi tại vị trí trong mã nơi bạn muốn đưa vào trình gỡ lỗi

# Some complicated code with bugs

breakpoint()

Gọi

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72
8 sẽ đưa bạn vào
import pdb; pdb.set_trace()
7, đây là trình gỡ lỗi mặc định của Python. Trên Python 3. 6 tuổi trở lên, bạn có thể làm tương tự bằng cách nhập rõ ràng
import pdb; pdb.set_trace()
7

import pdb; pdb.set_trace()

Giống như

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72
8,
>>> def get_name_and_decades(name, age):
..     return f"My name is {name} and I'm {age / 10:.5f} decades old."
...
>>> get_name_and_decades("Maria", 31)
My name is Maria and I'm 3.10000 decades old.
0 sẽ đưa bạn vào trình gỡ lỗi
import pdb; pdb.set_trace()
7. Nó không hoàn toàn sạch sẽ và cần nhớ thêm một chút

Có sẵn các trình sửa lỗi khác mà bạn có thể muốn thử, nhưng

import pdb; pdb.set_trace()
7 là một phần của thư viện tiêu chuẩn, vì vậy nó luôn có sẵn. Dù bạn thích trình gỡ lỗi nào hơn, bạn nên dùng thử chúng để làm quen với quy trình làm việc trước khi tham gia phỏng vấn lập trình

Định dạng chuỗi Với f-Strings

Python có rất nhiều cách khác nhau để xử lý định dạng chuỗi và thật khó để biết cách sử dụng. Trên thực tế, chúng tôi giải quyết vấn đề định dạng chuyên sâu trong hai bài viết riêng biệt. một về định dạng chuỗi nói chung và một tập trung cụ thể vào chuỗi f. Trong một cuộc phỏng vấn viết mã, nơi bạn (hy vọng) đang sử dụng Python 3. 6+, phương pháp định dạng được đề xuất là chuỗi f của Python

f-strings hỗ trợ sử dụng phép nội suy chuỗi , cũng như mạnh mẽ. Các tính năng này cho phép bạn thêm các biến hoặc thậm chí các biểu thức Python hợp lệ và đánh giá chúng trong thời gian chạy trước khi được thêm vào chuỗi

>>>_______ 49 _______

>>> def get_name_and_decades(name, age):
..     return f"My name is {name} and I'm {age / 10:.5f} decades old."
...
>>> get_name_and_decades("Maria", 31)
My name is Maria and I'm 3.10000 decades old.

Chuỗi f cho phép bạn đặt

>>> def get_name_and_decades(name, age):
..     return f"My name is {name} and I'm {age / 10:.5f} decades old."
...
>>> get_name_and_decades("Maria", 31)
My name is Maria and I'm 3.10000 decades old.
3 vào chuỗi và thêm tuổi của cô ấy với định dạng mong muốn trong một thao tác ngắn gọn

Một rủi ro cần lưu ý là nếu bạn đang xuất các giá trị do người dùng tạo, thì điều đó có thể gây ra rủi ro bảo mật, trong trường hợp đó có thể là một lựa chọn an toàn hơn

Sắp xếp danh sách phức tạp với >>> def get_name_and_decades(name, age): .. return f"My name is {name} and I'm {age / 10:.5f} decades old." ... >>> get_name_and_decades("Maria", 31) My name is Maria and I'm 3.10000 decades old. 4

Rất nhiều câu hỏi phỏng vấn viết mã yêu cầu một số kiểu sắp xếp và có nhiều cách hợp lệ để bạn có thể sắp xếp các mục. Trừ khi người phỏng vấn muốn bạn thực hiện thuật toán sắp xếp của riêng bạn, tốt nhất bạn nên sử dụng

>>> def get_name_and_decades(name, age):
..     return f"My name is {name} and I'm {age / 10:.5f} decades old."
...
>>> get_name_and_decades("Maria", 31)
My name is Maria and I'm 3.10000 decades old.
4

Bạn có thể đã thấy những cách sử dụng sắp xếp đơn giản nhất, chẳng hạn như sắp xếp danh sách các số hoặc chuỗi theo thứ tự tăng dần hoặc giảm dần

>>>

>>> sorted([6,5,3,7,2,4,1])
[1, 2, 3, 4, 5, 6, 7]

>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)
['rhino', 'dog', 'cheetah', 'cat', 'bear]

Theo mặc định,

>>> def get_name_and_decades(name, age):
..     return f"My name is {name} and I'm {age / 10:.5f} decades old."
...
>>> get_name_and_decades("Maria", 31)
My name is Maria and I'm 3.10000 decades old.
4 đã sắp xếp đầu vào theo thứ tự tăng dần và đối số từ khóa
>>> def get_name_and_decades(name, age):
..     return f"My name is {name} and I'm {age / 10:.5f} decades old."
...
>>> get_name_and_decades("Maria", 31)
My name is Maria and I'm 3.10000 decades old.
7 khiến nó sắp xếp theo thứ tự giảm dần

Bạn nên biết về đối số từ khóa tùy chọn

>>> def get_name_and_decades(name, age):
..     return f"My name is {name} and I'm {age / 10:.5f} decades old."
...
>>> get_name_and_decades("Maria", 31)
My name is Maria and I'm 3.10000 decades old.
8 cho phép bạn chỉ định một hàm sẽ được gọi trên mọi phần tử trước khi sắp xếp. Việc thêm một hàm cho phép các quy tắc sắp xếp tùy chỉnh, đặc biệt hữu ích nếu bạn muốn sắp xếp các loại dữ liệu phức tạp hơn

>>>_______ 60 _______

>>> animals = [
..     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},
..     {'type': 'elephant', 'name': 'Devon', 'age': 3},
..     {'type': 'puma', 'name': 'Moe', 'age': 5},
.. ]
>>> sorted(animals, key=lambda animal: animal['age'])
[
    {'type': 'elephant', 'name': 'Devon', 'age': 3},
    {'type': 'puma', 'name': 'Moe', 'age': 5},
    {'type': 'penguin', 'name': 'Stephanie, 'age': 8},
]

Bằng cách chuyển vào hàm lambda trả về tuổi của từng phần tử, bạn có thể dễ dàng sắp xếp danh sách từ điển theo một giá trị duy nhất của từng từ điển đó. Trong trường hợp này, từ điển hiện được sắp xếp theo thứ tự tăng dần theo độ tuổi

Loại bỏ các quảng cáo

Tận dụng cấu trúc dữ liệu hiệu quả

Các thuật toán nhận được nhiều sự chú ý trong các cuộc phỏng vấn viết mã, nhưng cấu trúc dữ liệu thậm chí còn quan trọng hơn. Trong bối cảnh phỏng vấn mã hóa, việc chọn cấu trúc dữ liệu phù hợp có thể có tác động lớn đến hiệu suất

Ngoài các cấu trúc dữ liệu lý thuyết, Python có chức năng mạnh mẽ và tiện lợi được tích hợp trong các triển khai cấu trúc dữ liệu tiêu chuẩn của nó. Các cấu trúc dữ liệu này cực kỳ hữu ích trong các cuộc phỏng vấn mã hóa vì chúng cung cấp cho bạn rất nhiều chức năng theo mặc định và cho phép bạn tập trung thời gian vào các phần khác của vấn đề

Lưu trữ các giá trị duy nhất với các bộ

Bạn sẽ thường xuyên cần xóa các phần tử trùng lặp khỏi tập dữ liệu hiện có. Các nhà phát triển mới đôi khi sẽ làm như vậy với các danh sách khi họ nên sử dụng các tập hợp để đảm bảo tính duy nhất của tất cả các phần tử

Giả sử bạn có một hàm tên là

>>> def get_name_and_decades(name, age):
..     return f"My name is {name} and I'm {age / 10:.5f} decades old."
...
>>> get_name_and_decades("Maria", 31)
My name is Maria and I'm 3.10000 decades old.
9. Nó sẽ luôn trả về một lựa chọn ngẫu nhiên từ một nhóm từ nhỏ

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
0

Bạn phải gọi

>>> def get_name_and_decades(name, age):
..     return f"My name is {name} and I'm {age / 10:.5f} decades old."
...
>>> get_name_and_decades("Maria", 31)
My name is Maria and I'm 3.10000 decades old.
9 nhiều lần để nhận 1000 từ ngẫu nhiên và sau đó trả về cấu trúc dữ liệu chứa mỗi từ duy nhất. Dưới đây là hai cách tiếp cận phổ biến, dưới mức tối ưu và một cách tiếp cận tốt

Cách tiếp cận tồi

>>> sorted([6,5,3,7,2,4,1])
[1, 2, 3, 4, 5, 6, 7]

>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)
['rhino', 'dog', 'cheetah', 'cat', 'bear]
1 lưu trữ các giá trị trong danh sách sau đó chuyển đổi danh sách thành một tập hợp

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
1

Cách tiếp cận này không tệ, nhưng nó tạo ra một danh sách một cách không cần thiết và sau đó chuyển đổi nó thành một tập hợp. Người phỏng vấn hầu như luôn chú ý (và hỏi về) kiểu lựa chọn thiết kế này

Cách tiếp cận tồi tệ hơn

Để tránh chuyển đổi từ danh sách thành tập hợp, giờ đây bạn lưu trữ các giá trị trong danh sách mà không sử dụng bất kỳ cấu trúc dữ liệu nào khác. Sau đó, bạn kiểm tra tính duy nhất bằng cách so sánh các giá trị mới với tất cả các phần tử hiện có trong danh sách

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
2

Cách này tệ hơn cách tiếp cận đầu tiên, bởi vì bạn phải so sánh mọi từ mới với mọi từ đã có trong danh sách. Điều đó có nghĩa là khi số lượng từ tăng lên, số lượng tra cứu tăng theo phương trình bậc hai. Nói cách khác, độ phức tạp thời gian tăng theo thứ tự O(N²)

Cách tiếp cận tốt

Bây giờ, bạn bỏ qua việc sử dụng danh sách hoàn toàn và thay vào đó sử dụng bộ ngay từ đầu

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
3

Điều này có thể trông không khác nhiều so với các phương pháp khác ngoại trừ việc sử dụng một tập hợp ngay từ đầu. Nếu bạn xem xét những gì đang xảy ra trong

>>> sorted([6,5,3,7,2,4,1])
[1, 2, 3, 4, 5, 6, 7]

>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)
['rhino', 'dog', 'cheetah', 'cat', 'bear]
2, nó thậm chí còn giống như cách tiếp cận thứ hai. lấy từ, kiểm tra xem nó đã có trong bộ chưa và nếu chưa, hãy thêm nó vào cấu trúc dữ liệu

Vậy tại sao sử dụng một bộ khác với cách tiếp cận thứ hai?

Nó khác vì đặt các phần tử lưu trữ theo cách cho phép kiểm tra thời gian gần như không đổi xem giá trị có nằm trong tập hợp hay không, không giống như danh sách, yêu cầu tra cứu theo thời gian tuyến tính. Sự khác biệt về thời gian tra cứu có nghĩa là độ phức tạp về thời gian để thêm vào một tập hợp tăng với tốc độ O(N), tốt hơn nhiều so với O(N²) từ cách tiếp cận thứ hai trong hầu hết các trường hợp

Loại bỏ các quảng cáo

Tiết kiệm bộ nhớ với máy phát điện

Khả năng hiểu danh sách là công cụ tiện lợi nhưng đôi khi có thể dẫn đến việc sử dụng bộ nhớ không cần thiết

Hãy tưởng tượng bạn được yêu cầu tìm tổng của 1000 ô vuông hoàn hảo đầu tiên, bắt đầu bằng 1. Bạn biết về khả năng hiểu danh sách, vì vậy bạn nhanh chóng viết ra một giải pháp hiệu quả

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
4

Giải pháp của bạn tạo một danh sách mọi ô vuông hoàn hảo trong khoảng từ 1 đến 1.000.000 và tính tổng các giá trị. Mã của bạn trả về câu trả lời đúng, nhưng sau đó người phỏng vấn của bạn bắt đầu tăng số ô vuông hoàn hảo mà bạn cần tính tổng

Lúc đầu, chức năng của bạn liên tục đưa ra câu trả lời đúng, nhưng chẳng mấy chốc, nó bắt đầu chậm lại cho đến khi cuối cùng quá trình này dường như bị treo vĩnh viễn. Đây là điều cuối cùng bạn muốn xảy ra trong một cuộc phỏng vấn viết mã

Những gì đang xảy ra ở đây?

Nó đang lập danh sách mọi hình vuông hoàn hảo mà bạn đã yêu cầu và tổng hợp tất cả chúng. Một danh sách có 1000 ô vuông hoàn hảo có thể không lớn về mặt máy tính, nhưng 100 triệu hoặc 1 tỷ là khá ít thông tin và có thể dễ dàng lấn át tài nguyên bộ nhớ khả dụng của máy tính của bạn. Đó là những gì đang xảy ra ở đây

Rất may, có một cách nhanh chóng để giải quyết vấn đề về bộ nhớ. Bạn chỉ cần thay thế dấu ngoặc đơn bằng dấu ngoặc đơn

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
5

Hoán đổi dấu ngoặc sẽ thay đổi cách hiểu danh sách của bạn thành biểu thức trình tạo. Biểu thức trình tạo hoàn hảo khi bạn biết mình muốn truy xuất dữ liệu từ một chuỗi, nhưng bạn không cần phải truy cập tất cả dữ liệu đó cùng một lúc

Thay vì tạo một danh sách, biểu thức trình tạo trả về một đối tượng

>>> sorted([6,5,3,7,2,4,1])
[1, 2, 3, 4, 5, 6, 7]

>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)
['rhino', 'dog', 'cheetah', 'cat', 'bear]
3. Đối tượng đó biết nó đang ở đâu trong trạng thái hiện tại (ví dụ:
>>> sorted([6,5,3,7,2,4,1])
[1, 2, 3, 4, 5, 6, 7]

>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)
['rhino', 'dog', 'cheetah', 'cat', 'bear]
4) và chỉ tính toán giá trị tiếp theo khi nó được yêu cầu

Vì vậy, khi

>>> sorted([6,5,3,7,2,4,1])
[1, 2, 3, 4, 5, 6, 7]

>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)
['rhino', 'dog', 'cheetah', 'cat', 'bear]
5 lặp lại đối tượng trình tạo bằng cách gọi liên tục
>>> sorted([6,5,3,7,2,4,1])
[1, 2, 3, 4, 5, 6, 7]

>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)
['rhino', 'dog', 'cheetah', 'cat', 'bear]
6, trình tạo sẽ kiểm tra xem
>>> sorted([6,5,3,7,2,4,1])
[1, 2, 3, 4, 5, 6, 7]

>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)
['rhino', 'dog', 'cheetah', 'cat', 'bear]
7 bằng bao nhiêu, tính toán
>>> sorted([6,5,3,7,2,4,1])
[1, 2, 3, 4, 5, 6, 7]

>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)
['rhino', 'dog', 'cheetah', 'cat', 'bear]
8, tăng nội bộ
>>> sorted([6,5,3,7,2,4,1])
[1, 2, 3, 4, 5, 6, 7]

>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)
['rhino', 'dog', 'cheetah', 'cat', 'bear]
7 và trả về giá trị phù hợp cho
>>> sorted([6,5,3,7,2,4,1])
[1, 2, 3, 4, 5, 6, 7]

>>> sorted(['cat', 'dog', 'cheetah', 'rhino', 'bear'], reverse=True)
['rhino', 'dog', 'cheetah', 'cat', 'bear]
5. Thiết kế cho phép các trình tạo được sử dụng trên các chuỗi dữ liệu lớn, bởi vì chỉ có một phần tử tồn tại trong bộ nhớ tại một thời điểm

Xác định giá trị mặc định trong từ điển với >>> animals = [ .. {'type': 'penguin', 'name': 'Stephanie', 'age': 8}, .. {'type': 'elephant', 'name': 'Devon', 'age': 3}, .. {'type': 'puma', 'name': 'Moe', 'age': 5}, .. ] >>> sorted(animals, key=lambda animal: animal['age']) [ {'type': 'elephant', 'name': 'Devon', 'age': 3}, {'type': 'puma', 'name': 'Moe', 'age': 5}, {'type': 'penguin', 'name': 'Stephanie, 'age': 8}, ] 1 và >>> animals = [ .. {'type': 'penguin', 'name': 'Stephanie', 'age': 8}, .. {'type': 'elephant', 'name': 'Devon', 'age': 3}, .. {'type': 'puma', 'name': 'Moe', 'age': 5}, .. ] >>> sorted(animals, key=lambda animal: animal['age']) [ {'type': 'elephant', 'name': 'Devon', 'age': 3}, {'type': 'puma', 'name': 'Moe', 'age': 5}, {'type': 'penguin', 'name': 'Stephanie, 'age': 8}, ] 2

Một trong những nhiệm vụ lập trình phổ biến nhất liên quan đến việc thêm, sửa đổi hoặc truy xuất một mục có thể có hoặc không có trong từ điển. Từ điển Python có chức năng thanh lịch để làm cho các tác vụ này trở nên rõ ràng và dễ dàng, nhưng các nhà phát triển thường kiểm tra rõ ràng các giá trị khi không cần thiết

Hãy tưởng tượng bạn có một cuốn từ điển tên là

>>> animals = [
..     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},
..     {'type': 'elephant', 'name': 'Devon', 'age': 3},
..     {'type': 'puma', 'name': 'Moe', 'age': 5},
.. ]
>>> sorted(animals, key=lambda animal: animal['age'])
[
    {'type': 'elephant', 'name': 'Devon', 'age': 3},
    {'type': 'puma', 'name': 'Moe', 'age': 5},
    {'type': 'penguin', 'name': 'Stephanie, 'age': 8},
]
3, và bạn muốn lấy tên của chàng cao bồi đó. Một cách tiếp cận là kiểm tra rõ ràng khóa có điều kiện

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
6

Cách tiếp cận này trước tiên kiểm tra xem khóa

>>> animals = [
..     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},
..     {'type': 'elephant', 'name': 'Devon', 'age': 3},
..     {'type': 'puma', 'name': 'Moe', 'age': 5},
.. ]
>>> sorted(animals, key=lambda animal: animal['age'])
[
    {'type': 'elephant', 'name': 'Devon', 'age': 3},
    {'type': 'puma', 'name': 'Moe', 'age': 5},
    {'type': 'penguin', 'name': 'Stephanie, 'age': 8},
]
4 có tồn tại trong từ điển hay không và nếu có, nó sẽ trả về giá trị tương ứng. Nếu không, nó trả về một giá trị mặc định

Mặc dù việc kiểm tra rõ ràng các phím vẫn hoạt động, nhưng nó có thể dễ dàng được thay thế bằng một dòng nếu bạn sử dụng

>>> animals = [
..     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},
..     {'type': 'elephant', 'name': 'Devon', 'age': 3},
..     {'type': 'puma', 'name': 'Moe', 'age': 5},
.. ]
>>> sorted(animals, key=lambda animal: animal['age'])
[
    {'type': 'elephant', 'name': 'Devon', 'age': 3},
    {'type': 'puma', 'name': 'Moe', 'age': 5},
    {'type': 'penguin', 'name': 'Stephanie, 'age': 8},
]
1

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
7

>>> animals = [
..     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},
..     {'type': 'elephant', 'name': 'Devon', 'age': 3},
..     {'type': 'puma', 'name': 'Moe', 'age': 5},
.. ]
>>> sorted(animals, key=lambda animal: animal['age'])
[
    {'type': 'elephant', 'name': 'Devon', 'age': 3},
    {'type': 'puma', 'name': 'Moe', 'age': 5},
    {'type': 'penguin', 'name': 'Stephanie, 'age': 8},
]
6 thực hiện các thao tác tương tự đã được thực hiện trong cách tiếp cận đầu tiên, nhưng giờ chúng được xử lý tự động. Nếu khóa tồn tại, thì giá trị phù hợp sẽ được trả về. Nếu không, giá trị mặc định sẽ được trả về

Nhưng nếu bạn muốn cập nhật từ điển với giá trị mặc định trong khi vẫn truy cập khóa

>>> animals = [
..     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},
..     {'type': 'elephant', 'name': 'Devon', 'age': 3},
..     {'type': 'puma', 'name': 'Moe', 'age': 5},
.. ]
>>> sorted(animals, key=lambda animal: animal['age'])
[
    {'type': 'elephant', 'name': 'Devon', 'age': 3},
    {'type': 'puma', 'name': 'Moe', 'age': 5},
    {'type': 'penguin', 'name': 'Stephanie, 'age': 8},
]
4 thì sao?

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
8

Kiểm tra giá trị và đặt mặc định là một cách tiếp cận hợp lệ và dễ đọc, nhưng một lần nữa Python đưa ra một phương thức tinh tế hơn với ____60_______2

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
9

>>> animals = [
..     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},
..     {'type': 'elephant', 'name': 'Devon', 'age': 3},
..     {'type': 'puma', 'name': 'Moe', 'age': 5},
.. ]
>>> sorted(animals, key=lambda animal: animal['age'])
[
    {'type': 'elephant', 'name': 'Devon', 'age': 3},
    {'type': 'puma', 'name': 'Moe', 'age': 5},
    {'type': 'penguin', 'name': 'Stephanie, 'age': 8},
]
2 hoàn thành chính xác điều tương tự như đoạn mã trên. Nó kiểm tra xem
>>> animals = [
..     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},
..     {'type': 'elephant', 'name': 'Devon', 'age': 3},
..     {'type': 'puma', 'name': 'Moe', 'age': 5},
.. ]
>>> sorted(animals, key=lambda animal: animal['age'])
[
    {'type': 'elephant', 'name': 'Devon', 'age': 3},
    {'type': 'puma', 'name': 'Moe', 'age': 5},
    {'type': 'penguin', 'name': 'Stephanie, 'age': 8},
]
4 có tồn tại trong
>>> animals = [
..     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},
..     {'type': 'elephant', 'name': 'Devon', 'age': 3},
..     {'type': 'puma', 'name': 'Moe', 'age': 5},
.. ]
>>> sorted(animals, key=lambda animal: animal['age'])
[
    {'type': 'elephant', 'name': 'Devon', 'age': 3},
    {'type': 'puma', 'name': 'Moe', 'age': 5},
    {'type': 'penguin', 'name': 'Stephanie, 'age': 8},
]
3 hay không và nếu có thì nó trả về giá trị đó. Mặt khác, nó đặt
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
03 thành
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
04 và trả về giá trị mới

Loại bỏ các quảng cáo

Tận dụng thư viện chuẩn của Python

Theo mặc định, Python đi kèm với rất nhiều chức năng chỉ cần một câu lệnh

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
05. Bản thân nó rất mạnh, nhưng biết cách tận dụng thư viện tiêu chuẩn có thể nâng cao kỹ năng phỏng vấn mã hóa của bạn

Thật khó để chọn ra những phần hữu ích nhất từ ​​tất cả các mô-đun có sẵn, vì vậy phần này sẽ chỉ tập trung vào một tập hợp con nhỏ các chức năng tiện ích của nó. Hy vọng rằng những điều này sẽ hữu ích cho bạn trong các cuộc phỏng vấn viết mã và cũng kích thích bạn muốn tìm hiểu thêm về chức năng nâng cao của các mô-đun này và các mô-đun khác

Xử lý các khóa từ điển bị thiếu với >>> numbers = [45, 22, 14, 65, 97, 72] >>> for i, num in enumerate(numbers): .. if num % 3 == 0 and num % 5 == 0: .. numbers[i] = 'fizzbuzz' .. elif num % 3 == 0: .. numbers[i] = 'fizz' .. elif num % 5 == 0: .. numbers[i] = 'buzz' ... >>> numbers ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz'] 06

>>> animals = [
..     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},
..     {'type': 'elephant', 'name': 'Devon', 'age': 3},
..     {'type': 'puma', 'name': 'Moe', 'age': 5},
.. ]
>>> sorted(animals, key=lambda animal: animal['age'])
[
    {'type': 'elephant', 'name': 'Devon', 'age': 3},
    {'type': 'puma', 'name': 'Moe', 'age': 5},
    {'type': 'penguin', 'name': 'Stephanie, 'age': 8},
]
1 và
>>> animals = [
..     {'type': 'penguin', 'name': 'Stephanie', 'age': 8},
..     {'type': 'elephant', 'name': 'Devon', 'age': 3},
..     {'type': 'puma', 'name': 'Moe', 'age': 5},
.. ]
>>> sorted(animals, key=lambda animal: animal['age'])
[
    {'type': 'elephant', 'name': 'Devon', 'age': 3},
    {'type': 'puma', 'name': 'Moe', 'age': 5},
    {'type': 'penguin', 'name': 'Stephanie, 'age': 8},
]
2 hoạt động tốt khi bạn đặt giá trị mặc định cho một khóa duy nhất, nhưng bạn thường muốn có một giá trị mặc định cho tất cả các khóa có thể chưa đặt, đặc biệt là khi lập trình trong bối cảnh phỏng vấn viết mã

Giả sử bạn có một nhóm học sinh và bạn cần theo dõi điểm của họ trong bài tập về nhà. Giá trị đầu vào là một danh sách các bộ dữ liệu có định dạng

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
09, nhưng bạn muốn dễ dàng tra cứu tất cả các điểm của một học sinh mà không cần lặp lại danh sách

Một cách để lưu trữ dữ liệu điểm là sử dụng từ điển ánh xạ tên học sinh vào danh sách điểm

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72
0

Trong cách tiếp cận này, bạn lặp lại các sinh viên và kiểm tra xem tên của họ đã là thuộc tính trong từ điển chưa. Nếu không, bạn thêm chúng vào từ điển với một danh sách trống làm giá trị mặc định. Sau đó, bạn nối điểm thực tế của họ vào danh sách điểm của học sinh đó

Nhưng có một cách tiếp cận thậm chí còn gọn gàng hơn, đó là sử dụng một

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
10, mở rộng chức năng tiêu chuẩn của
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
11 để cho phép bạn đặt một giá trị mặc định sẽ được vận hành nếu khóa không tồn tại

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72
1

Trong trường hợp này, bạn đang tạo một

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
10 sử dụng hàm tạo
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
13 không có đối số làm phương thức xuất xưởng mặc định.
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
13 không có đối số trả về một danh sách trống, vì vậy,
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
10 gọi
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
13 nếu tên không tồn tại và sau đó cho phép thêm điểm. Nếu bạn muốn trở nên lạ mắt, bạn cũng có thể sử dụng hàm lambda làm giá trị xuất xưởng của mình để trả về một hằng số tùy ý

Tận dụng một

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
10 có thể dẫn đến mã ứng dụng sạch hơn vì bạn không phải lo lắng về các giá trị mặc định ở cấp khóa. Thay vào đó, bạn có thể xử lý chúng một lần ở cấp độ
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
10 và sau đó hành động như thể chìa khóa luôn hiện hữu. Để biết thêm thông tin về kỹ thuật này, hãy xem Sử dụng Loại ký tự mặc định của Python để xử lý các khóa bị thiếu

Đếm các đối tượng có thể băm với >>> numbers = [45, 22, 14, 65, 97, 72] >>> for i, num in enumerate(numbers, start=52): .. print(i, num) ... 52 45 53 22 54 14 55 65 56 97 57 72 9

Bạn có một chuỗi dài các từ không có dấu chấm câu hoặc chữ in hoa và bạn muốn đếm xem mỗi từ xuất hiện bao nhiêu lần

Bạn có thể sử dụng từ điển hoặc

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
10 và tăng số lượng, nhưng
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72
9 cung cấp một cách rõ ràng và thuận tiện hơn để thực hiện chính xác điều đó. Bộ đếm là một lớp con của
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
11 sử dụng
>>> def is_odd(x):
..    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]
3 làm giá trị mặc định cho bất kỳ phần tử nào bị thiếu và giúp đếm số lần xuất hiện của các đối tượng dễ dàng hơn

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72
2

Khi bạn chuyển danh sách các từ tới

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
24, nó sẽ lưu từng từ cùng với số lần từ đó xuất hiện trong danh sách

Bạn có tò mò hai từ phổ biến nhất là gì không?

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72
3

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
25 là một phương thức thuận tiện và chỉ cần trả về giá trị đầu vào thường xuyên nhất của
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
27 theo số lượng

Loại bỏ các quảng cáo

Truy cập các nhóm chuỗi chung với các hằng số >>> numbers = [45, 22, 14, 65, 97, 72] >>> for i, num in enumerate(numbers): .. if num % 3 == 0 and num % 5 == 0: .. numbers[i] = 'fizzbuzz' .. elif num % 3 == 0: .. numbers[i] = 'fizz' .. elif num % 5 == 0: .. numbers[i] = 'buzz' ... >>> numbers ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz'] 28

Đó là thời gian đố.

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
29 đúng hay sai?

Đó là sai, vì mã ASCII của

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
30 là 65, nhưng
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
31 là 97 và 65 không lớn hơn 97

Tại sao câu trả lời lại quan trọng?

Kiểm tra mã ASCII hoạt động nhưng vụng về và dễ gây nhầm lẫn trong các cuộc phỏng vấn mã hóa, đặc biệt nếu bạn không thể nhớ liệu ký tự ASCII chữ thường hay chữ hoa có trước. Việc sử dụng các hằng số được định nghĩa là một phần của mô-đun

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
28 sẽ dễ dàng hơn nhiều

Bạn có thể thấy một ký tự được sử dụng trong

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
35, trả về liệu tất cả các ký tự trong một chuỗi có phải là chữ in hoa hay không

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72
4

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
35 lặp lại các chữ cái trong
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
37 và kiểm tra xem các chữ cái đó có phải là một phần của
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
38 không. Nếu bạn in ra
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
38, bạn sẽ thấy nó chỉ là một chuỗi tầm thường. Giá trị được đặt thành chữ
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
40

Tất cả các hằng số

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
28 chỉ là các chuỗi giá trị chuỗi được tham chiếu thường xuyên. Chúng bao gồm những điều sau đây

  • >>> numbers = [45, 22, 14, 65, 97, 72]
    >>> for i, num in enumerate(numbers):
    ..     if num % 3 == 0 and num % 5 == 0:
    ..         numbers[i] = 'fizzbuzz'
    ..     elif num % 3 == 0:
    ..         numbers[i] = 'fizz'
    ..     elif num % 5 == 0:
    ..         numbers[i] = 'buzz'
    ...
    >>> numbers
    ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
    
    42
  • >>> numbers = [45, 22, 14, 65, 97, 72]
    >>> for i, num in enumerate(numbers):
    ..     if num % 3 == 0 and num % 5 == 0:
    ..         numbers[i] = 'fizzbuzz'
    ..     elif num % 3 == 0:
    ..         numbers[i] = 'fizz'
    ..     elif num % 5 == 0:
    ..         numbers[i] = 'buzz'
    ...
    >>> numbers
    ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
    
    38
  • >>> numbers = [45, 22, 14, 65, 97, 72]
    >>> for i, num in enumerate(numbers):
    ..     if num % 3 == 0 and num % 5 == 0:
    ..         numbers[i] = 'fizzbuzz'
    ..     elif num % 3 == 0:
    ..         numbers[i] = 'fizz'
    ..     elif num % 5 == 0:
    ..         numbers[i] = 'buzz'
    ...
    >>> numbers
    ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
    
    44
  • >>> numbers = [45, 22, 14, 65, 97, 72]
    >>> for i, num in enumerate(numbers):
    ..     if num % 3 == 0 and num % 5 == 0:
    ..         numbers[i] = 'fizzbuzz'
    ..     elif num % 3 == 0:
    ..         numbers[i] = 'fizz'
    ..     elif num % 5 == 0:
    ..         numbers[i] = 'buzz'
    ...
    >>> numbers
    ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
    
    45
  • >>> numbers = [45, 22, 14, 65, 97, 72]
    >>> for i, num in enumerate(numbers):
    ..     if num % 3 == 0 and num % 5 == 0:
    ..         numbers[i] = 'fizzbuzz'
    ..     elif num % 3 == 0:
    ..         numbers[i] = 'fizz'
    ..     elif num % 5 == 0:
    ..         numbers[i] = 'buzz'
    ...
    >>> numbers
    ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
    
    46
  • >>> numbers = [45, 22, 14, 65, 97, 72]
    >>> for i, num in enumerate(numbers):
    ..     if num % 3 == 0 and num % 5 == 0:
    ..         numbers[i] = 'fizzbuzz'
    ..     elif num % 3 == 0:
    ..         numbers[i] = 'fizz'
    ..     elif num % 5 == 0:
    ..         numbers[i] = 'buzz'
    ...
    >>> numbers
    ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
    
    47
  • >>> numbers = [45, 22, 14, 65, 97, 72]
    >>> for i, num in enumerate(numbers):
    ..     if num % 3 == 0 and num % 5 == 0:
    ..         numbers[i] = 'fizzbuzz'
    ..     elif num % 3 == 0:
    ..         numbers[i] = 'fizz'
    ..     elif num % 5 == 0:
    ..         numbers[i] = 'buzz'
    ...
    >>> numbers
    ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
    
    48
  • >>> numbers = [45, 22, 14, 65, 97, 72]
    >>> for i, num in enumerate(numbers):
    ..     if num % 3 == 0 and num % 5 == 0:
    ..         numbers[i] = 'fizzbuzz'
    ..     elif num % 3 == 0:
    ..         numbers[i] = 'fizz'
    ..     elif num % 5 == 0:
    ..         numbers[i] = 'buzz'
    ...
    >>> numbers
    ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
    
    49
  • >>> numbers = [45, 22, 14, 65, 97, 72]
    >>> for i, num in enumerate(numbers):
    ..     if num % 3 == 0 and num % 5 == 0:
    ..         numbers[i] = 'fizzbuzz'
    ..     elif num % 3 == 0:
    ..         numbers[i] = 'fizz'
    ..     elif num % 5 == 0:
    ..         numbers[i] = 'buzz'
    ...
    >>> numbers
    ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
    
    50

Chúng dễ sử dụng hơn và thậm chí quan trọng hơn là dễ đọc hơn

Tạo các hoán vị và kết hợp với >>> numbers = [45, 22, 14, 65, 97, 72] >>> for i, num in enumerate(numbers): .. if num % 3 == 0 and num % 5 == 0: .. numbers[i] = 'fizzbuzz' .. elif num % 3 == 0: .. numbers[i] = 'fizz' .. elif num % 5 == 0: .. numbers[i] = 'buzz' ... >>> numbers ['fizzbuzz', 22, 14, 'buzz', 97, 'fizz'] 51

Người phỏng vấn thích đưa ra các tình huống thực tế để làm cho các cuộc phỏng vấn mã hóa có vẻ bớt đáng sợ hơn, vì vậy đây là một ví dụ giả định. bạn đến một công viên giải trí và quyết định tìm ra từng cặp bạn có thể ngồi cùng nhau trên tàu lượn siêu tốc

Trừ khi tạo ra các cặp này là mục đích chính của câu hỏi phỏng vấn, có khả năng tạo ra tất cả các cặp có thể chỉ là một bước tẻ nhạt trên con đường hướng tới một thuật toán hoạt động. Bạn có thể tự tính toán chúng bằng các vòng lặp for lồng nhau hoặc bạn có thể sử dụng thư viện

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
51 mạnh mẽ

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
51 có nhiều công cụ để tạo các chuỗi dữ liệu đầu vào có thể lặp lại, nhưng ngay bây giờ chúng ta sẽ chỉ tập trung vào hai chức năng phổ biến.
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
54 và
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
55

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
54 tạo danh sách tất cả các hoán vị, nghĩa là danh sách mọi nhóm giá trị đầu vào có thể có với độ dài khớp với tham số
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
57. Đối số từ khóa
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
58 cho phép chúng tôi chỉ định có bao nhiêu giá trị trong mỗi nhóm

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72
5

Với hoán vị, thứ tự của các phần tử rất quan trọng, do đó,

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
59 đại diện cho một cặp khác với
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
60, nghĩa là cả hai sẽ được đưa vào danh sách

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
55 kết hợp xây dựng. Đây cũng là những nhóm có thể có của các giá trị đầu vào, nhưng bây giờ thứ tự của các giá trị không thành vấn đề. Bởi vì
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
59 và
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
60 đại diện cho cùng một cặp, nên chỉ một trong số chúng sẽ được đưa vào danh sách đầu ra

>>>

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
..     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72
6

Vì thứ tự của các giá trị không quan trọng với các kết hợp, nên có ít kết hợp hơn so với hoán vị cho cùng một danh sách đầu vào. Một lần nữa, bởi vì chúng tôi đặt

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
58 thành 2, mỗi nhóm có hai tên trong đó

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
65 và
>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
..     if num % 3 == 0 and num % 5 == 0:
..         numbers[i] = 'fizzbuzz'
..     elif num % 3 == 0:
..         numbers[i] = 'fizz'
..     elif num % 5 == 0:
..         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']
66 chỉ là những ví dụ nhỏ về một thư viện mạnh mẽ, nhưng ngay cả hai hàm này cũng có thể khá hữu ích khi bạn đang cố gắng giải một bài toán thuật toán một cách nhanh chóng

Loại bỏ các quảng cáo

Phần kết luận. Siêu năng lực phỏng vấn mã hóa

Giờ đây, bạn có thể cảm thấy thoải mái khi sử dụng một số tính năng tiêu chuẩn ít phổ biến hơn nhưng mạnh mẽ hơn của Python trong cuộc phỏng vấn mã hóa tiếp theo của mình. Có rất nhiều điều để tìm hiểu về ngôn ngữ nói chung nhưng bài viết này sẽ cung cấp cho bạn điểm khởi đầu để tìm hiểu sâu hơn đồng thời cho phép bạn sử dụng Python hiệu quả hơn khi phỏng vấn

Trong bài viết này, bạn đã học được các loại công cụ tiêu chuẩn khác nhau để nâng cao kỹ năng phỏng vấn mã hóa của mình

  • Cấu trúc dữ liệu được xây dựng để xử lý các tình huống phổ biến với hầu như không có mã nào
  • Các gói thư viện tiêu chuẩn có các giải pháp giàu tính năng cho các vấn đề cụ thể, cho phép bạn viết mã tốt hơn nhanh hơn

Phỏng vấn có thể không phải là cách tốt nhất để phát triển phần mềm thực sự, nhưng bạn nên biết cách thành công trong bất kỳ môi trường lập trình nào, kể cả phỏng vấn. Rất may, học cách sử dụng Python trong các cuộc phỏng vấn viết mã có thể giúp bạn hiểu sâu hơn về ngôn ngữ này, điều này sẽ mang lại lợi ích trong quá trình phát triển hàng ngày

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Phỏng vấn lập trình Python. Mẹo & Phương pháp hay nhất

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Bẻ khóa cuộc phỏng vấn mã hóa Python

Gửi cho tôi thủ thuật Python »

Giới thiệu về James Timmins

Bẻ khóa cuộc phỏng vấn mã hóa Python
Bẻ khóa cuộc phỏng vấn mã hóa Python

James là nhà tư vấn phần mềm và nhà phát triển Python. Khi anh ấy không viết Python, anh ấy thường viết về nó dưới dạng blog hoặc sách

» Thông tin thêm về James


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Bẻ khóa cuộc phỏng vấn mã hóa Python

Aldren

Bẻ khóa cuộc phỏng vấn mã hóa Python

Geir Arne

Bẻ khóa cuộc phỏng vấn mã hóa Python

Joanna

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Cracking the Coding Interview có sẵn trong Python không?

Đây là các giải pháp Python cho cuốn sách Cracking the Coding Interview, 6th Edition của Gayle Laakmann McDowell.

Làm cách nào để bẻ khóa các bài kiểm tra Python phỏng vấn mã hóa?

Làm thế nào để bạn trả lời các câu hỏi phỏng vấn viết mã Python? . Thử thử nghiệm mô hình, tìm hiểu mọi chi tiết trong khi viết mã, vẽ một ví dụ cụ thể, thiết kế thuật toán, tối ưu hóa thuật toán, viết mã và kiểm tra thuật toán .

Cracking the Coding Interview có đáng mua không?

Nếu bạn đã sẵn sàng bắt đầu phỏng vấn với các công ty FAANG, Cracking the Coding Interview đáng để bạn dành thời gian và đầu tư . Nó bao gồm mọi thứ từ quy trình phỏng vấn đến các tình huống đặc biệt, chuẩn bị trước khi phỏng vấn đến các câu hỏi về hành vi, Big O đến các câu hỏi kỹ thuật, đến 189 câu hỏi lập trình trong thế giới thực.

Cracking the Coding Interview có khó không?

Khi bạn tham gia một cuộc phỏng vấn lập trình, rất ít khả năng bạn sẽ gặp phải một vấn đề mà bạn đã gặp trước đây. Các câu hỏi kỹ thuật mà bạn gặp phải sẽ trừu tượng và rất khó giải quyết .