Vairāk
Skaidra izpratne par šķēļu pierakstu
Man ir nepieciešams labs skaidrojums (atsauces ir plus) par Python'slice notācija.
Man šķiet, ka šī notācija ir mazliet jāiedziļinās.
Izskatās, ka tā ir ārkārtīgi jaudīga, bet es to vēl neesmu īsti apguvis.
2992
3
Tas ir pavisam vienkārši:
Ir arī
stepa
vērtība, ko var izmantot kopā ar jebkuru no iepriekš minētajām:Galvenais ir atcerēties, ka
:stop
vērtība ir pirmā vērtība, kas nav izvēlētajā šķēlumā. Tātad atšķirība starpstop
unstart
ir atlasīto elementu skaits (jastep
ir 1, kas ir noklusējuma vērtība).Otra īpatnība ir tā, ka
start
vaistop
var būt negatīvs skaitlis, kas nozīmē, ka tas tiek skaitīts no masīva beigām, nevis sākuma. Tātad:Līdzīgi arī
steps
var būt negatīvs skaitlis:Python ir laipns pret programmētāju, ja ir mazāk elementu, nekā jūs lūdzat. Piemēram, ja jūs pieprasāt
a[:-2]
una
satur tikai vienu elementu, jūs kļūdu vietā saņemsiet tukšu sarakstu. Dažreiz jūs labprātāk izvēlaties kļūdu, tāpēc jums ir jāapzinās, ka tā var notikt.Saistība ar objektu
slice()
Iepriekš minētajā kodā griešanas operators
[]
faktiski tiek izmantots kopā arslice()
objektu, izmantojot:
notāciju (kas ir derīga tikai[]
ietvaros), t.i..:ir ekvivalents:
Slice objekti arī uzvedas nedaudz atšķirīgi atkarībā no argumentu skaita, līdzīgi kā
range()
, t.i., tiek atbalstīti ganslice(stop)
, ganslice(start, stop[, step])
. Lai izlaistu dotā argumenta norādīšanu, var izmantotNone
, tādējādi, piemēram,a[start:]
ir ekvivalentsa[slice(start, None)]
vaia[::-1]
ir ekvivalentsa[slice(None, None, -1)]
.Lai gan uz
:
balstītā notācija ir ļoti noderīga vienkāršas sagriešanas gadījumā, tiešaslice()
objektu izmantošana vienkāršo sagriešanas programmatisko ģenerēšanu.Par to ir runāts Python pamācībā (ritiniet nedaudz uz leju, līdz nonākat līdz daļai par sagriešanu).
ASCII mākslas diagramma ir noderīga arī, lai atcerētos, kā darbojas griezumi:
Gramatikas atļauto iespēju uzskaitījums:
Protams, ja
(high-low)%stride != 0
, tad beigu punkts būs nedaudz zemāk parhigh-1
.Ja
stride
ir negatīvs, nedaudz mainās secība, jo mēs skaitām uz leju:Paplašināto griezumu (ar komatiem un elipsēm) pārsvarā izmanto tikai īpašas datu struktūras (piemēram, NumPy); pamata secības tos neatbalsta.