Python String maketrans()
เมธอด maketrans() ส่งคืนตารางการแมปสำหรับการแปลที่ใช้งานได้สำหรับเมธอด translate() นี่เป็นวิธีการแบบคงที่ที่สร้างการจับคู่อักขระแบบหนึ่งต่อหนึ่งกับการแปล/การแทนที่ เมธอดนี้จะสร้างการแสดง Unicode ของอักขระแต่ละตัวสำหรับการแปล
ไวยากรณ์ของเมธอด maketrans() คือ −
string.maketrans(x[, y[, z]]) y and z are optional arguments.
พารามิเตอร์สตริง maketrans()
เมธอด maketrans() มี 3 พารามิเตอร์
x - ในกรณีนี้ หากมีเพียงหนึ่งอาร์กิวเมนต์ จะต้องเป็นพจนานุกรมและพจนานุกรมควรมีการแมปแบบ 1 ต่อ 1 จากสตริงอักขระตัวเดียวไปยังการแปล หรือหมายเลข Unicode (97 สำหรับ 'a') ไปยังการแปล .
y - ในกรณีนี้ หากส่งผ่านอาร์กิวเมนต์ 2 รายการ ต้องเป็นสตริงสองสตริงที่มีความยาวเท่ากัน และอักขระแต่ละตัวในสตริงแรกจะแทนที่ดัชนีที่เกี่ยวข้องในสตริงที่สอง
z - ในกรณีนี้หากส่งผ่านสามอาร์กิวเมนต์ อักขระแต่ละตัวในอาร์กิวเมนต์ที่สามจะถูกจับคู่กับไม่มี
คืนค่าจากสตริง maketrans()
เมธอดนี้ส่งคืนตารางการแปลที่มีการแมปแบบ 1 ต่อ 1 ของลำดับ Unicode ไปยังการแปล/แทนที่
ตัวอย่าง1
ตารางการแปลโดยใช้พจนานุกรมที่มี maketrans()
โค้ดตัวอย่าง
dict= {"a": "123", "b": "456", "c": "789"} my_string = "abc" print(my_string.maketrans(dict)) # example dictionary dict = {97: "123", 98: "456", 99: "789"} my_string = "abc" print(my_string.maketrans(dict))
ผลลัพธ์
{97: '123', 98: '456', 99: '789'} {97: '123', 98: '456', 99: '789'}
คำอธิบาย − ในตัวอย่างนี้ dict คือพจนานุกรมและประกอบด้วยการแมปอักขระ a,b และ c ถึง 123, 456 และ 789 ตามลำดับ maketrans() สร้างการแมปของลำดับ Unicode ของอักขระกับการแปลที่เกี่ยวข้อง ดังนั้น ผลลัพธ์คือ 97 ('a') ถูกจับคู่กับ '123', 98 'b' ถึง 456 และ 99 'c' ถึง 789
ตัวอย่าง2
ตารางการแปลโดยใช้สองสตริงที่มี maketrans()
ตัวอย่าง
my_string1 = "abc" my_string2 = "def" string = "abc" print(string.maketrans(my_string1, my_string2)) # Example dictionary my_string1 = "abc" my_string2 = "defghi" string = "abc" print(string.maketrans(my_string1, my_string2))
ผลลัพธ์
{97: 100, 98: 101, 99: 102} ValueError: the first two maketrans arguments must have equal length
คำอธิบาย − ในตัวอย่างนี้ มีการกำหนดสตริงสองสตริงที่มีความยาวเท่ากัน "abc" และ "def" และการแปลที่เกี่ยวข้องจะถูกสร้างขึ้นและพิมพ์เฉพาะการแปลครั้งแรกเท่านั้น ให้คุณจับคู่ 1 ต่อ 1 กับลำดับ Unicode ของอักขระแต่ละตัวใน my_string1 กับอักขระที่ทำดัชนีเดียวกันบน my_string2
แต่ในกรณีนี้ 97 ('a') ถูกจับคู่กับ 100 ('d'), 98 ('b') ถึง 101 ('e') และ 99 ('c') ถึง 102 ('f') และพยายาม ในการสร้างตารางการแปลสำหรับสตริงที่มีความยาวไม่เท่ากัน จะทำให้เกิดข้อยกเว้น ValueError ซึ่งบ่งชี้ว่าสตริงนั้นต้องมีความยาวเท่ากัน
แปล() . เรารู้ว่าตารางการแปลจะจับคู่อักขระกับอักขระอื่นๆ เราใช้เมธอด translate() ใน Python สำหรับการแทนที่อักขระจำนวนมากในสตริง ขั้นแรก เราสร้างพจนานุกรมการแปลด้วย maketrans() และส่งต่อสิ่งนี้เพื่อแปล
โปรแกรม Python ที่ใช้ maketrans แปล
#Python program that uses maketrans, translate dict = str.maketrans("abc", "def") print(dict) # Translate this value. value = "aabbcc" result = value.translate(dict) print(result)
ผลลัพธ์
{97: 100, 98: 101, 99: 102} ddeeff
โปรแกรม Python ที่ละเว้น ลบอักขระ
# Create translation table. table = str.maketrans("78", "12", "9") # Translate this string. input = "123456789" result = input.translate(table) # Write results. print(input) print(result)
ผลลัพธ์
123456789 12345612
โปรแกรม Python ที่ใช้การแปล rot13
#Create translation table. trans = str.maketrans("abcdefghijklmnopqrstuvwxyz","nopqrstuvwxyzabcdefghijklm") # Apply rot13 translation. print("gandalf".translate(trans)) print("gandalf".translate(trans).translate(trans))
ผลลัพธ์
tnaqnys gandalf