Câu hỏi phỏng vấn về hiểu danh sách trong python

Danh sách Python là một kiểu dữ liệu tích hợp mạnh mẽ có thể lưu trữ các mục. Trong bài viết này, chúng ta sẽ xem xét một số câu hỏi phỏng vấn danh sách python phổ biến. Thoải mái viết mã và thử nghiệm các giải pháp mới cho các câu hỏi quen thuộc. Đó là một cách tuyệt vời để hiểu rõ hơn về danh sách python. Mã trong bài viết này đã được thử nghiệm vào ngày 9 tháng 2 năm 2021

1. Tìm chuỗi dài nhất trong danh sách

Đưa ra một danh sách các chuỗi, chúng tôi muốn tìm chuỗi dài nhất trong danh sách. Chúng tôi biết rằng độ phức tạp thời gian tốt nhất mà chúng tôi có thể hy vọng là O[n] vì chúng tôi phải kiểm tra độ dài của mỗi chuỗi ít nhất một lần. Một câu hỏi hay để hỏi người phỏng vấn của bạn là thuật toán sẽ xử lý trường hợp danh sách chuỗi đã cho chứa nhiều chuỗi dài nhất như thế nào. Để đơn giản, chúng tôi sẽ trả về bất kỳ một trong những chuỗi dài nhất trong danh sách

Phương pháp 1. Lặp lại danh sách bằng vòng lặp và theo dõi chuỗi dài nhất

Sử dụng vòng lặp for là cách tiếp cận tiêu chuẩn để lặp qua danh sách. Một cho mỗi vòng lặp là tốt nhất để lặp qua danh sách các chuỗi cho vấn đề này vì nó loại bỏ nhu cầu xử lý các chỉ mục và dẫn đến mã dễ đọc hơn, ít bị lỗi lập chỉ mục hơn

string_list = ["hello", "world", "let's", "learn", "some", "Python"]
longest = ""
for current_string in string_list:
if len[current_string] > len[longest]:
longest = current_string
print[longest] # Python

Phương pháp 2. Lặp lại danh sách bằng cách sử dụng phương pháp chức năng

Lập trình hàm thay thế các cấu trúc viết mã thường được sử dụng, chẳng hạn như vòng lặp for và while, bằng một hàm. Điều này thường dẫn đến mã dễ đọc hơn và mã ít bị lỗi hơn. Cho người phỏng vấn thấy rằng bạn hiểu sự đánh đổi của việc sử dụng phương pháp chức năng để giải quyết vấn đề có thể giúp bạn kiếm được điểm chính

import functoolsstring_list = ["hello", "world", "let's", "learn", "some", "Python"]
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]
print[longest] # Python
2. Chuyển chuỗi thành danh sách ký tự

Hãy xem làm thế nào, với một chuỗi, chúng ta có thể chuyển đổi chuỗi đó thành một danh sách các ký tự chứa trong chuỗi

Phương pháp 1. Lặp qua chuỗi bằng vòng lặp for

Cách trực quan để chuyển đổi một chuỗi thành danh sách các ký tự là lặp qua chuỗi và thêm từng ký tự vào danh sách

character_string = "character"
character_list = []
for character in character_string:
character_list.append[character]
print[character_list] # ["c", "h", "a", "r", "a", "c", "t", "e", "r"]

Phương pháp 2. Danh sách hiểu

Python đi kèm với một cơ chế sẵn có mạnh mẽ được gọi là hiểu danh sách. Khả năng hiểu danh sách cho phép xây dựng danh sách các thành phần từ một lần lặp theo cách nhỏ gọn và dễ đọc

character_string = "character"
character_list = [char for char in character_string]
print[character_list] # ["c", "h", "a", "r", "a", "c", "t", "e", "r"]
3. Chuyển đổi chuỗi được phân tách bằng dấu phẩy thành danh sách

Đây là một câu hỏi phỏng vấn hay bởi vì việc tách một chuỗi thành một danh sách các chuỗi con là một vấn đề thường xuất hiện trong lập trình thế giới thực. Ví dụ: để phân tích tệp csv, có thể cần phải phân tích tệp văn bản, từng dòng một và chuyển đổi từng chuỗi được phân tách bằng dấu phẩy từ mỗi dòng thành danh sách

with open[path_to_csv] as csv:
for row in csv:
columns = row.split[","]

Hàm tách là một cách nhanh chóng và dễ dàng để tách bất kỳ chuỗi nào trên dấu phân cách

split_string = "Split me, please"string_list = split_string.split[]
print[string_list] # ["Split", "me,", "please"]
string_list = split_string.split[","]
print[string_list] # ["Split me", " please"]
4. Kiểm tra xem chuỗi có chứa chuỗi con từ danh sách không

Vấn đề này yêu cầu chúng ta kiểm tra từng chuỗi trong một danh sách nhất định để xem liệu chuỗi đó có tồn tại dưới dạng chuỗi con trong một số chuỗi lớn hơn đã cho hay không

Phương pháp 1. Lặp lại đơn giản

Cách trực quan để làm điều này là lặp qua từng chuỗi trong danh sách và kiểm tra xem nó có tồn tại trong chuỗi lớn hơn không

l = ['hello', 'world']contains = "this string contains the word hello"
not_contains = "this string contains no relevant words"
def check_contains[string_list, larger_string]:
for w in string_list:
if w in larger_string:
return True
return False
print[check_contains[l, contains]] # True
print[check_contains[l, not_contains]] # False

Bằng cách lặp qua các từ trong danh sách và các từ trong chuỗi, chúng tôi đang kiểm tra kỹ lưỡng để xem những từ nào có trong cả danh sách và chuỗi của chúng tôi. Điều này dẫn đến độ phức tạp thời gian O[n²]. Tuy nhiên, như chúng ta sẽ thấy trong phương pháp tiếp theo, điều này có thể được tối ưu hóa để đạt được hiệu suất thời gian tốt hơn

Phương pháp 2. Đặt giao lộ

Chúng ta có thể tối ưu hóa độ phức tạp về thời gian của thuật toán này bằng cách sử dụng hai bộ, một bộ để giữ các từ trong danh sách và bộ kia để giữ các từ trong chuỗi lớn hơn. Sau đó, chúng ta có thể kiểm tra giao điểm giữa hai chuỗi

l = ['hello', 'world']contains = "this string contains the word hello"
not_contains = "this string contains no relevant words"
def check_contains[string_list, larger_string]:
return len[set[string_list].intersection[larger_string.split[]]] > 0
print[check_contains[l, contains]] # True
print[check_contains[l, not_contains]] # False

Thuật toán này có độ phức tạp thời gian được cải thiện là O[n] thời gian để tạo hai tập hợp, với chi phí sử dụng nhiều không gian hơn so với thuật toán trước đó để giữ các từ trong tập hợp

5. Chuyển đổi danh sách ký tự thành chuỗi

Cái này đơn giản và có thể được thực hiện bằng cách gọi hàm tiêu chuẩn, trong python

________số 8

Vấn đề này có thể được coi là nghịch đảo của vấn đề 2, ở trên

6. Xóa mục khỏi danh sách [đồng thời xóa mục đầu tiên và mục cuối cùng khỏi danh sách]

Có hai hàm danh sách quan trọng cần nhớ để xóa các mục khỏi danh sách trong Python

  1. danh sách. xóa[x]. Xóa mục đầu tiên khỏi danh sách có giá trị bằng x
  2. danh sách. bốp[[i]]. Xóa mục trong danh sách tại chỉ mục được ký hiệu là i. Nếu không có giá trị i được cung cấp, giá trị cuối cùng trong danh sách sẽ bị xóa

Hãy xem một ví dụ

number_list = [1, 4, 2, 6, 2, 5]number_list.remove[2]
print[number_list] # [1, 4, 6, 2, 5]
number_list. remove[2]
print[number_list] # [1, 4, 6, 5]
number_list.remove[1]
print[number_list] # [4, 6, 5]
number_list.remove[2] # ValueError: list.remove[x]: x not in list

Xóa mục đầu tiên hoặc mục cuối cùng khỏi danh sách có thể được thực hiện bằng cách sử dụng danh sách. hàm pop[]

import functoolsstring_list = ["hello", "world", "let's", "learn", "some", "Python"]
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]
print[longest] # Python
07. Xóa trùng lặp khỏi danh sách

Có nhiều cách để giải quyết vấn đề này, vì vậy hãy phân tích một số cách phổ biến nhất

Phương pháp 1. lặp lại

Đây là giải pháp trực quan nhất. Hãy lặp lại danh sách và không bao gồm bất kỳ mục trùng lặp nào

import functoolsstring_list = ["hello", "world", "let's", "learn", "some", "Python"]
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]
print[longest] # Python
1

Phương pháp 2. bộ

Vì các bộ không cho phép trùng lặp, giải pháp cho vấn đề này có thể được thực hiện ngắn gọn và dễ đọc hơn bằng cách sử dụng một bộ

import functoolsstring_list = ["hello", "world", "let's", "learn", "some", "Python"]
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]
print[longest] # Python
28. Kiểm tra xem Danh sách có trống không

Để kiểm tra xem một danh sách có trống không, tất cả những gì cần làm là kiểm tra độ dài của nó. Độ dài bằng 0 biểu thị rằng danh sách trống. Tuy nhiên, hãy đảm bảo kiểm tra xem danh sách có tồn tại hay không trước khi kiểm tra độ dài của danh sách để biết danh sách có trống không, nếu không bạn có thể gặp lỗi

import functoolsstring_list = ["hello", "world", "let's", "learn", "some", "Python"]
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]
print[longest] # Python
39. Đảo ngược thứ tự danh sách

Giải pháp trực quan là lặp lại danh sách theo thứ tự ngược lại bằng cách sử dụng vòng lặp và tạo một chuỗi mới lặp lại ngược lại với chuỗi ban đầu. Chúng ta hãy xem xét hai cách dễ đọc và nhỏ gọn hơn để giải quyết vấn đề này

Phương pháp 1. sử dụng danh sách. chức năng đảo ngược []

API danh sách của Python cung cấp chức năng tiêu chuẩn để đảo ngược danh sách một cách nhanh chóng

import functoolsstring_list = ["hello", "world", "let's", "learn", "some", "Python"]
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]
print[longest] # Python
4

Phương pháp 2. Sử dụng List Slicing

Một cách thành ngữ khác thường được sử dụng để đảo ngược danh sách trong python là cắt danh sách theo thứ tự ngược lại

import functoolsstring_list = ["hello", "world", "let's", "learn", "some", "Python"]
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]
print[longest] # Python
5

Phần kết luận

Và chúng ta đã có nó, 9 câu hỏi danh sách Python quan trọng cần nắm vững cho cuộc phỏng vấn tiếp theo. Tôi hy vọng bạn thấy bài viết này hữu ích. Cảm ơn bạn đã đọc và hẹn gặp lại trong bài viết tiếp theo

Hiểu danh sách trong các câu hỏi phỏng vấn Python là gì?

Tính năng chính của khả năng hiểu danh sách là khả năng xử lý các chuỗi bộ và xử lý dưới dạng danh sách . Trong khi trong các vòng lặp 'for', Python gán tên cho từng phần tử của mục có thể lặp lại và sau đó thực thi khi nó đặt tên cho chúng.

Việc sử dụng hiểu danh sách trong Python là gì?

Hiểu danh sách cung cấp cú pháp ngắn hơn khi bạn muốn tạo danh sách mới dựa trên các giá trị của danh sách hiện có . Thí dụ. Dựa trên danh sách các loại trái cây, bạn muốn có một danh sách mới, chỉ chứa các loại trái cây có chữ "a" trong tên.

Cái nào lọc nhanh hơn hoặc hiểu danh sách?

Phương pháp hiểu danh sách nhanh hơn một chút . Điều này, như chúng ta mong đợi, từ việc tiết kiệm thời gian không gọi hàm append. Hàm bản đồ và bộ lọc không hiển thị tốc độ tăng đáng kể so với vòng lặp Python thuần túy.

Khả năng hiểu danh sách luôn nhanh hơn vòng lặp for?

Việc hiểu danh sách nhanh hơn vòng lặp for để tạo danh sách . Tuy nhiên, điều này là do chúng tôi đang tạo danh sách bằng cách thêm các phần tử mới vào danh sách đó ở mỗi lần lặp lại.

Chủ Đề