Apakah operasi irisan diperbolehkan dalam python?

Metode slice()_ mengembalikan sebagian dari iterable sebagai objek dari kelas

mystr = 'TutorialsTeacher'
nums = [1,2,3,4,5,6,7,8,9,10]

portion1 = slice(9)
portion2 = slice(2, 8, 2)   

print('slice: ', portion1)
print('String value: ', mystr[portion1])
print('List value: ', nums[portion1])

print('slice: ', portion2)
print('String value: ', mystr[portion2])
print('List value: ', nums[portion2])
0 berdasarkan rentang yang ditentukan. Ini dapat digunakan dengan objek string, daftar, tupel, set, byte, atau rentang atau objek kelas khusus yang mengimplementasikan metode urutan
mystr = 'TutorialsTeacher'
nums = [1,2,3,4,5,6,7,8,9,10]

portion1 = slice(9)
portion2 = slice(2, 8, 2)   

print('slice: ', portion1)
print('String value: ', mystr[portion1])
print('List value: ', nums[portion1])

print('slice: ', portion2)
print('String value: ', mystr[portion2])
print('List value: ', nums[portion2])
1 dan
mystr = 'TutorialsTeacher'
nums = [1,2,3,4,5,6,7,8,9,10]

portion1 = slice(9)
portion2 = slice(2, 8, 2)   

print('slice: ', portion1)
print('String value: ', mystr[portion1])
print('List value: ', nums[portion1])

print('slice: ', portion2)
print('String value: ', mystr[portion2])
print('List value: ', nums[portion2])
2 metode

Sintaksis

slice(stop)
slice(start, stop, step)

Parameter

  1. Mulailah. (Opsional) Memulai indeks tempat pemotongan iterable dimulai. Nilai default tidak ada
  2. berhenti. Mengakhiri indeks tempat pengirisan harus diakhiri
  3. melangkah. (Opsional) Bilangan bulat untuk menaikkan indeks awal. Default ke Tidak Ada

Nilai Pengembalian

Mengembalikan objek dari kelas

mystr = 'TutorialsTeacher'
nums = [1,2,3,4,5,6,7,8,9,10]

portion1 = slice(9)
portion2 = slice(2, 8, 2)   

print('slice: ', portion1)
print('String value: ', mystr[portion1])
print('List value: ', nums[portion1])

print('slice: ', portion2)
print('String value: ', mystr[portion2])
print('List value: ', nums[portion2])
0

Contoh berikut menunjukkan metode slice() dengan nilai string

Contoh. slice() dengan String

Salinan

mystr = 'TutorialsTeacher'
nums = [1,2,3,4,5,6,7,8,9,10]

portion1 = slice(9)
portion2 = slice(2, 8, 2)   

print('slice: ', portion1)
print('String value: ', mystr[portion1])
print('List value: ', nums[portion1])

print('slice: ', portion2)
print('String value: ', mystr[portion2])
print('List value: ', nums[portion2])

Keluaran

slice: slice(None, 9, None)
String value: Tutorials
List value: [1,2,3,4,5,6,7,8,9]

slice: slice(2, 8, 2)
String value: tra
List value: [3, 5, 7]
_

Di atas,

mystr = 'TutorialsTeacher'
nums = [1,2,3,4,5,6,7,8,9,10]

portion1 = slice(9)
portion2 = slice(2, 8, 2)   

print('slice: ', portion1)
print('String value: ', mystr[portion1])
print('List value: ', nums[portion1])

print('slice: ', portion2)
print('String value: ', mystr[portion2])
print('List value: ', nums[portion2])
_5 mengembalikan objek irisan sebagai
mystr = 'TutorialsTeacher'
nums = [1,2,3,4,5,6,7,8,9,10]

portion1 = slice(9)
portion2 = slice(2, 8, 2)   

print('slice: ', portion1)
print('String value: ', mystr[portion1])
print('List value: ', nums[portion1])

print('slice: ', portion2)
print('String value: ', mystr[portion2])
print('List value: ', nums[portion2])
6, yang dapat Anda berikan ke objek iterable apa pun untuk mendapatkan bagian indeks itu

Metode slice()_ dapat digunakan dengan string, list, tuple, set, byte, atau range. Contoh berikut mengambil bagian dari objek daftar

kembalikan [(nama, alamat) untuk nama, alamat sendiri. alamat jika ada (nama. atas(). dimulai dengan(huruf) untuk huruf demi huruf)]

def __getitem__(diri, kunci)

mengembalikan diri. get_addresses_by_first_letters(kunci)

if isinstance(kunci, iris)

mulai, berhenti, langkah = kunci. mulai, kunci. berhenti, kunci. melangkah

huruf = (string. ascii_huruf besar[string. ascii_uppercase. indeks(mulai). rangkaian. ascii_uppercase. indeks(berhenti)+1. melangkah])

mengembalikan diri. get_addresses_by_first_letters(huruf)

address_book = AddressBook()

buku alamat. add_address("Sherlock Holmes", "221B Baker St. , London")

buku alamat. add_address("Wallace dan Gromit", "62 West Wallaby Street, Wigan, Lancashire")

buku alamat. add_address("Peter Wimsey", "110a Piccadilly, London")

buku alamat. add_address("Al Bundy", "9764 Jeopardy Lane, Chicago, Illinois")

buku alamat. add_address("John Dolittle", "Oxenthorpe Road, Puddleby-on-the-Marsh, Slopshire, Inggris")

buku alamat. add_address("Spongebob Squarepants", "124 Conch Street, Bikini Bottom, Samudera Pasifik")

buku alamat. add_address("Hercule Poirot", "Apt. 56B, Whitehaven Mansions, Sandhurst Square, London W1")

Jawaban di atas tidak membahas penugasan slice. Untuk memahami penugasan irisan, ada gunanya menambahkan konsep lain ke seni ASCII

                +---+---+---+---+---+---+
                | P | y | t | h | o | n |
                +---+---+---+---+---+---+
Slice position: 0   1   2   3   4   5   6
Index position:   0   1   2   3   4   5

>>> p = ['P','y','t','h','o','n']
# Why the two sets of numbers:
# indexing gives items, not lists
>>> p[0]
 'P'
>>> p[5]
 'n'

# Slicing gives lists
>>> p[0:1]
 ['P']
>>> p[0:2]
 ['P','y']
_

Satu heuristik adalah, untuk potongan dari nol hingga n, pikirkan. "nol adalah awal, mulai dari awal dan ambil n item dalam daftar"

>>> p[5] # the last of six items, indexed from zero
 'n'
>>> p[0:5] # does NOT include the last item!
 ['P','y','t','h','o']
>>> p[0:6] # not p[0:5]!!!
 ['P','y','t','h','o','n']

Heuristik lainnya adalah, "untuk irisan apa pun, ganti awal dengan nol, terapkan heuristik sebelumnya untuk mendapatkan akhir daftar, lalu hitung kembali angka pertama untuk memotong item dari awal"

>>> p[0:4] # Start at the beginning and count out 4 items
 ['P','y','t','h']
>>> p[1:4] # Take one item off the front
 ['y','t','h']
>>> p[2:4] # Take two items off the front
 ['t','h']
# etc.

Aturan pertama penugasan slice adalah karena slicing mengembalikan daftar, penugasan slice memerlukan daftar (atau iterable lainnya)

>>> p[2:3]
 ['t']
>>> p[2:3] = ['T']
>>> p
 ['P','y','T','h','o','n']
>>> p[2:3] = 't'
Traceback (most recent call last):
  File "", line 1, in 
TypeError: can only assign an iterable

Aturan kedua penetapan irisan, yang juga dapat Anda lihat di atas, adalah bahwa bagian apa pun dari daftar yang dikembalikan oleh pengindeksan irisan, itu adalah bagian yang sama yang diubah oleh penetapan irisan

>>> p[2:4]
 ['T','h']
>>> p[2:4] = ['t','r']
>>> p
 ['P','y','t','r','o','n']

Aturan ketiga penugasan slice adalah, daftar yang ditugaskan (iterable) tidak harus memiliki panjang yang sama;

>>> p = ['P','y','t','h','o','n'] # Start over
>>> p[2:4] = ['s','p','a','m']
>>> p
 ['P','y','s','p','a','m','o','n']

Bagian tersulit untuk membiasakan diri adalah penugasan ke irisan kosong. Dengan menggunakan heuristik 1 dan 2, mudah bagi Anda untuk mengindeks irisan kosong

>>> p = ['P','y','t','h','o','n']
>>> p[0:4]
 ['P','y','t','h']
>>> p[1:4]
 ['y','t','h']
>>> p[2:4]
 ['t','h']
>>> p[3:4]
 ['h']
>>> p[4:4]
 []

Dan setelah Anda melihatnya, penugasan irisan ke irisan kosong juga masuk akal

>>> p = ['P','y','t','h','o','n']
>>> p[2:4] = ['x','y'] # Assigned list is same length as slice
>>> p
 ['P','y','x','y','o','n'] # Result is same length
>>> p = ['P','y','t','h','o','n']
>>> p[3:4] = ['x','y'] # Assigned list is longer than slice
>>> p
 ['P','y','t','x','y','o','n'] # The result is longer
>>> p = ['P','y','t','h','o','n']
>>> p[4:4] = ['x','y']
>>> p
 ['P','y','t','h','x','y','o','n'] # The result is longer still

Perhatikan bahwa, karena kita tidak mengubah angka kedua dari potongan (4), item yang disisipkan selalu bertumpuk di atas 'o', bahkan saat kita menugaskan ke potongan kosong. Jadi posisi untuk penugasan irisan kosong adalah perluasan logis dari posisi penugasan irisan tidak kosong

Mencadangkan sedikit, apa yang terjadi jika Anda terus melanjutkan prosesi penghitungan awal potongan kami?

>>> p = ['P','y','t','h','o','n']
>>> p[0:4]
 ['P','y','t','h']
>>> p[1:4]
 ['y','t','h']
>>> p[2:4]
 ['t','h']
>>> p[3:4]
 ['h']
>>> p[4:4]
 []
>>> p[5:4]
 []
>>> p[6:4]
 []

Dengan mengiris, setelah selesai, selesai; . Di Python Anda tidak mendapatkan langkah negatif kecuali Anda secara eksplisit memintanya dengan menggunakan angka negatif

>>> p[5:3:-1]
 ['n','o']

Ada beberapa konsekuensi aneh pada aturan "setelah Anda selesai, Anda selesai".

>>> p[5] # the last of six items, indexed from zero
 'n'
>>> p[0:5] # does NOT include the last item!
 ['P','y','t','h','o']
>>> p[0:6] # not p[0:5]!!!
 ['P','y','t','h','o','n']
_0

Faktanya, dibandingkan dengan pengindeksan, pemotongan Python sangat anti-kesalahan

>>> p[5] # the last of six items, indexed from zero
 'n'
>>> p[0:5] # does NOT include the last item!
 ['P','y','t','h','o']
>>> p[0:6] # not p[0:5]!!!
 ['P','y','t','h','o','n']
_1

Ini terkadang berguna, tetapi juga dapat menyebabkan perilaku yang agak aneh

>>> p[5] # the last of six items, indexed from zero
 'n'
>>> p[0:5] # does NOT include the last item!
 ['P','y','t','h','o']
>>> p[0:6] # not p[0:5]!!!
 ['P','y','t','h','o','n']
_2

Bergantung pada aplikasi Anda, itu mungkin. atau mungkin tidak. menjadi apa yang Anda harapkan di sana


Di bawah ini adalah teks jawaban asli saya. Ini bermanfaat bagi banyak orang, jadi saya tidak ingin menghapusnya

Tipe data apa yang memungkinkan pemotongan dengan Python?

Python mendukung notasi irisan untuk semua jenis data berurutan seperti daftar, string, tupel, byte, bytearray, dan rentang . Juga, setiap struktur data baru dapat menambahkan dukungannya juga. Ini sangat digunakan (dan disalahgunakan) di perpustakaan NumPy dan Pandas, yang sangat populer di Pembelajaran Mesin dan Ilmu Data.

Apa itu operasi pemotongan dengan Python?

Mengiris dengan Python adalah fitur yang memungkinkan pengaksesan bagian urutan seperti string, tupel, dan daftar . Anda juga dapat menggunakannya untuk mengubah atau menghapus item urutan yang dapat diubah seperti daftar.

Bisakah Anda mengiris file dengan Python?

Dengan Python, daftar dapat dipotong menggunakan tanda titik dua . Dalam contoh berikut, kami akan menggunakan pengiris daftar untuk membagi file teks menjadi beberapa file yang lebih kecil.