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"]2. Chuyển chuỗi thành danh sách ký tự
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]print[longest] # Python
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"3. Chuyển đổi chuỗi được phân tách bằng dấu phẩy thành danh sách
character_list = [char for char in character_string]print[character_list] # ["c", "h", "a", "r", "a", "c", "t", "e", "r"]
Đâ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[]4. Kiểm tra xem chuỗi có chứa chuỗi con từ danh sách không
print[string_list] # ["Split", "me,", "please"]string_list = split_string.split[","]
print[string_list] # ["Split me", " please"]
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 Falseprint[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[]]] > 0print[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
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ố 8Vấ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
- danh sách. xóa[x]. Xóa mục đầu tiên khỏi danh sách có giá trị bằng x
- 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"]07. Xóa trùng lặp khỏi danh sách
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]print[longest] # Python
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"]1
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]print[longest] # Python
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"]28. Kiểm tra xem Danh sách có trống không
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]print[longest] # Python
Để 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"]39. Đảo ngược thứ tự danh sách
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]print[longest] # Python
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"]4
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]print[longest] # Python
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"]5
longest = functools.reduce[lambda longest, current_string: current_string if len[current_string] > len[longest] else longest, string_list, ""]print[longest] # Python
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