ข้ามไปยังเนื้อหา

Sequence Slicing

TypeScript ใช้ Array.prototype.slice(start, end) เพื่อดึง subarray Python มี syntax slicing ที่กว้างกว่ามากซึ่งสร้างอยู่ใน syntax ของภาษาโดยตรง ไม่ใช่ method call: sequence[start:stop:step] สิ่งนี้ทำงานบน list, string, tuple และ sequence ใดก็ตาม ทำให้โค้ดที่เกี่ยวข้องกับ sequence กระชับและอ่านง่ายกว่ามาก

TypeScript
// TypeScript: Array.slice(start, end) — end is exclusive
const data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(data.slice(2, 5)); // [2, 3, 4]
console.log(data.slice(0, 3)); // [0, 1, 2]
console.log(data.slice(7)); // [7, 8, 9]
// No built-in step — need filter or manual loop
const evens = data.filter((_, i) => i % 2 === 0);
console.log(evens); // [0, 2, 4, 6, 8]
// Reverse
console.log([...data].reverse()); // [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Python
# Python: [start:stop:step] — stop is exclusive, step is optional
data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(data[2:5]) # [2, 3, 4]
print(data[:3]) # [0, 1, 2] — omit start → from beginning
print(data[7:]) # [7, 8, 9] — omit stop → to end
print(data[::2]) # [0, 2, 4, 6, 8] — every other element
print(data[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] — reverse

สามส่วนของ slice ล้วนเป็น optional: [:] คัดลอก sequence ทั้งหมด, [::2] ดึงทุก element ที่สอง, [::-1] กลับลำดับ

Python อนุญาตให้ใช้ index ติดลบเพื่อนับจากท้าย -1 คือ element สุดท้าย, -2 คือ element รองสุดท้าย และต่อไป สิ่งนี้ทำงานทั้งใน index เดี่ยวและใน slice

TypeScript
// TypeScript: negative index requires .at() (ES2022) or length math
const data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(data.at(-1)); // 9 — last element
console.log(data.at(-3)); // 7
// Last 3 elements via slice
console.log(data.slice(-3)); // [7, 8, 9]
// All but first and last
console.log(data.slice(1, -1)); // [1, 2, 3, 4, 5, 6, 7, 8]
Python
# Python: negative index works natively everywhere
data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(data[-1]) # 9 — last element
print(data[-3:]) # [7, 8, 9] — last 3 elements
print(data[1:-1]) # [1, 2, 3, 4, 5, 6, 7, 8] — all but first and last

Python slice ทำงานบน string เหมือนกับ list คืนค่าเป็น string ใหม่ TypeScript ใช้ .slice() หรือ .substring() บน string

TypeScript
// TypeScript: string slicing with .slice()
const text = "Hello, World!";
console.log(text.slice(7, 12)); // "World"
console.log(text.split("").reverse().join("")); // "!dlroW ,olleH"
Python
# Python: slicing works identically on strings
text = "Hello, World!"
print(text[7:12]) # "World"
print(text[::-1]) # "!dlroW ,olleH" — reverse a string
data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(data[2:5])
print(data[:3])
print(data[7:])
print(data[::2])
print(data[::-1])
print(data[-1])
print(data[-3:])
print(data[1:-1])
text = "Hello, World!"
print(text[7:12])
print(text[::-1])
data[2:5] บน list [0,1,2,3,4,5,6,7,8,9] ให้ผลลัพธ์อะไร?
data[::-1] ทำอะไร?
สำหรับ data = [0,1,2,3,4,5,6,7,8,9], data[-3:] ให้ผลลัพธ์อะไร?
text = 'Hello'; text[::2] ให้ผลลัพธ์อะไร?