Hướng dẫn how do you capitalize the first letter of each word in a list in python? - làm cách nào để bạn viết hoa chữ cái đầu tiên của mỗi từ trong danh sách trong python?

Trong bài viết này, chúng tôi sẽ thảo luận về 5 cách khác nhau để chuyển đổi chữ cái đầu tiên của mỗi từ trong một chuỗi thành chữ hoa. Chúng tôi cũng sẽ thảo luận về những hạn chế của mỗi phương pháp và cách nào là tốt nhất cho chúng tôi.

Sử dụng Tiêu đề () để viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi trong Python

Lớp Python Str cung cấp một tiêu đề chức năng thành viên () tạo ra mỗi từ tiêu đề từ trong chuỗi. Nó có nghĩa là, nó chuyển đổi ký tự đầu tiên của từng từ thành trường hợp trên và tất cả các ký tự còn lại của từ thành chữ thường.

Hãy để sử dụng điều này để viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi,

sample_text = "this is a sample string"

# Capitalize the first letter of each word i.e.
# Convert the first letter of each word to Upper case and all other to lower case
result = sample_text.title()

print(result)

Output:

Quảng cáo

This Is A Sample String

Nó hoạt động tốt với giải pháp này, nhưng có một cảnh báo. Hàm Tiêu đề () không chỉ viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi mà còn làm cho tất cả các ký tự còn lại của mỗi từ sang trường hợp trên. Ví dụ,

sample_text = "33a. it's GONE too far"

# Capitalize the first letter of each word
result = sample_text.title()

print(result)

Output:

33A. It'S Gone Too Far

Có 3 hành vi bất ngờ trong ví dụ trên,

  • Trong ví dụ này, nó đã chuyển đổi trên đường đi thành một cách khác, bởi vì đối với mỗi từ trong chuỗi, nó chỉ tạo ra ký tự đầu tiên là trường hợp trên và tất cả các ký tự còn lại là chữ thường.
  • Nó đã chuyển đổi thành công của nó thành một cách khác, vì nó đã coi đó là một từ khác.
  • Nó đã chuyển đổi từ 33a, thành 33a, bởi vì nó đã coi đó là một chữ cái đầu tiên của Word Word 33a.

Vì vậy, hàm Title () không phải là giải pháp tốt nhất để viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi. & Nbsp; hãy để thảo luận về một giải pháp khác,

Lớp Python sườn Str cung cấp một hàm viết hoa (), nó chuyển đổi ký tự đầu tiên của chuỗi thành vỏ trên. Trường hợp nó đã ở trong trường hợp trên thì nó không làm gì cả.

Chúng ta có thể sử dụng vốn hóa này () để viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi. Đối với điều đó, chúng ta cần chia chuỗi của mình thành một danh sách các từ và sau đó trên mỗi từ trong danh sách chúng ta cần gọi hàm viết hoa (). Sau đó, chúng ta cần tham gia tất cả các từ được viết hoa để tạo thành một chuỗi lớn.

Hãy để hiểu điều này với một ví dụ,

def capitalize_each_word(original_str):
    result = ""
    # Split the string and get all words in a list
    list_of_words = original_str.split()
    # Iterate over all elements in list
    for elem in list_of_words:
        # capitalize first letter of each word and add to a string
        if len(result) > 0:
            result = result + " " + elem.strip().capitalize()
        else:
            result = elem.capitalize()
    # If result is still empty then return original string else returned capitalized.
    if not result:
        return original_str
    else:
        return result

sample_text = "33a. it's GONE too far"

result = capitalize_each_word(sample_text)

print(result)

Output:

33a. It's Gone Too Far

Nó đã chuyển đổi chữ cái đầu tiên của mỗi từ trong chuỗi thành trường hợp trên.

Thay vì viết chức năng lớn, chúng ta có thể đạt được giống nhau bằng cách sử dụng các biểu thức máy phát, tức là.

sample_text = "33a. it's GONE too far"

result = ' '.join(elem.capitalize() for elem in sample_text.split())

print(result)

Output:

33a. It's Gone Too Far

Ở đây chúng tôi chia chuỗi thành các từ và lặp lại từng từ của chúng tôi trong chuỗi bằng cách sử dụng biểu thức tạo. Trong khi lặp lại, chúng tôi đã gọi hàm viết hoa () trên mỗi từ, để chuyển đổi chữ cái đầu tiên thành chữ hoa và từ đó đã nối thành một chuỗi bằng cách sử dụng ‘làm dấu hiệu.

Nó phục vụ mục đích, nhưng có thể có một vấn đề trong cách tiếp cận này, tức là nếu các từ trong chuỗi gốc được phân tách bằng nhiều không gian trắng hoặc tab, v.v. thì cách tiếp cận này có thể gây ra lỗi, bởi vì chúng ta đang tham gia tất cả các từ được viết hoa bằng cách sử dụng cùng một dấu phân cách, tức là. một không gian trắng duy nhất. Kiểm tra ví dụ này,

sample_text = "this     is       a      sample   string"

result = ' '.join(elem.capitalize() for elem in sample_text.split())

print(result)

Output:

This Is A Sample String

Ở đây chuỗi ban đầu có nhiều khoảng trống giữa các từ, nhưng trong chuỗi cuối cùng của chúng tôi, tất cả các từ được viết hoa được phân tách bằng một không gian trắng. Đối với một số điều này có thể không phải là hành vi chính xác. Vì vậy, để khắc phục vấn đề này, hãy kiểm tra phương pháp tiếp theo của chúng tôi.

Sử dụng String.capwords () để viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi

Mô -đun chuỗi Python sườn cung cấp một hàm capwords () để chuyển đổi chữ cái đầu tiên thành chữ hoa và tất cả các chữ cái còn lại khác thành chữ thường. Về cơ bản, nó phân tách chuỗi thành các từ và sau khi viết hoa mỗi từ, tham gia cùng chúng bằng cách sử dụng một trình phân tách nhất định. Kiểm tra ví dụ này,
It basically splits the string to words and after capitalizing each word, joins them back using a given seperator. Checkout this example,

This Is A Sample String
0

Output:

This Is A Sample String
1

Vấn đề với giải pháp IS là nó không chỉ chuyển đổi chữ cái đầu tiên thành chữ hoa mà còn làm cho các chữ cái còn lại của từ thành chữ thường. Đối với một số người, đây có thể không phải là giải pháp chính xác.

Vì vậy, hãy để thảo luận về giải pháp cuối cùng và tốt nhất của chúng tôi, những gì chỉ mong đợi từ nó.

Sử dụng regex để viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi

Sử dụng regex, chúng tôi sẽ tìm kiếm ký tự bắt đầu của từng từ và chuyển đổi thành chữ hoa. Ví dụ,

This Is A Sample String
2

Output:

This Is A Sample String
3

Nó chỉ viết hoa ký tự đầu tiên của mỗi từ trong chuỗi và không sửa đổi khoảng trắng giữa các từ.

Nó đã hoạt động như thế nào?

Chúng tôi đã tạo sử dụng một mẫu (^| \ s) (\ s). Nó tìm kiếm các mẫu chuỗi bắt đầu bằng không gian trắng hoặc nhiều hơn và sau đó có một ký tự không có khoảng trắng sau đó. Sau đó, với mỗi trường hợp phù hợp, nó nhóm cả khoảng trắng ban đầu và ký tự đầu tiên là các nhóm riêng biệt. Sử dụng hàm regex.sub (), chúng tôi đã chuyển từng phiên bản phù hợp của mẫu thành hàm convert_to_uppercase (), chuyển đổi nhóm thứ hai, tức là chữ cái đầu tiên của từ thành trên và sau đó tham gia với nhóm đầu tiên (không hoặc nhiều khoảng trắng hơn ).

Cho chuỗi,

This Is A Sample String
4

Hàm convert_to_uupercase () được gọi là 4 lần bởi regex.sub () và trong mỗi nhóm cuộc gọi 1 & 2 của đối tượng khớp là,

This Is A Sample String
5

Bên trong Convert_to_uupercase (), nó đã chuyển đổi nhóm thứ hai, tức là ký tự đầu tiên của mỗi từ thành chữ hoa.

Vì vậy, đây là cách chúng ta có thể tận dụng chữ cái đầu tiên của mỗi từ trong một chuỗi bằng cách sử dụng regex và không ảnh hưởng đến bất kỳ ký tự nào khác của chuỗi.

Ví dụ hoàn chỉnh như sau,

This Is A Sample String
6

Output:

This Is A Sample String
7