Daugiau
Konkrečių simbolių pašalinimas iš eilutės naudojant "Python
Bandau pašalinti tam tikrus simbolius iš eilutės naudodamasis "Python". Dabar naudoju tokį kodą. Deja, atrodo, kad jis nieko nedaro su eilute.
for char in line:
if char in " ?.!/;:":
line.replace(char,'')
Kaip tai padaryti tinkamai?
488
3
"Python" eilutės yra nepakeičiamos (jų negalima keisti). Dėl to
line.replace(...)
sukuria naują eilutę, o ne pakeičia senąją. Kad kintamasis įgytų naują reikšmę su pašalintais ženklais, reikia ją perpinti (priskirti) kintamajamline
.Be to, jūsų pasirinktas būdas bus gana lėtas. Taip pat tikėtina, kad tai šiek tiek suklaidins patyrusius pitonininkus, kurie, pamatę dvigubą struktūrą, akimirką pagalvos, kad vyksta kažkas sudėtingesnio.
Nuo Python 2.6 ir naujesnių Python 2.x versijų * vietoj to galite naudoti
str.translate
, (bet apie Python 3 skirtumus skaitykite toliau):arba reguliariosios išraiškos pakeitimas naudojant
re.sub
Skliausteliuose nurodyti simboliai sudaro ženklų klasę. Bet kokie
line
simboliai, priklausantys šiai klasei, pakeičiami antruojusub
parametru: tuščia eilute.Python 3 versijoje eilutės yra Unicode. Reikės versti šiek tiek kitaip. kevpie apie tai užsimena komentare prie vieno iš atsakymų, ir tai'pažymėta dokumentacijoje
str.translate
.Kviečiant Unicode eilutės
translate
metodą, negalima perduoti antrojo parametro, kurį naudojome anksčiau. Taip pat negalima perduotiNone
kaip pirmojo parametro arba net vertimo lentelės išstring.maketrans
. Vietoj to kaip vienintelį parametrą reikia perduoti žodyną. Šiame žodyne simbolių ordinalinės vertės (t. y. rezultatas, gautas iškvietusord
jiems) yra perkeliamos į simbolių, kurie turėtų juos pakeisti, ordinalias vertes arba - mums naudinga - įNone
, nurodantį, kad jie turėtų būti ištrinti.Taigi, norėdami atlikti pirmiau minėtą šokį su Unicode eilute, turėtumėte iškviesti kažką panašaus į
Čia
dict.fromkeys
irmap
naudojami glaustai sukurti žodyną, kuriame yraDar paprasčiau, kaip rašoma kitame atsakyme, sukurti žodyną vietoje:
* dėl suderinamumo su ankstesniais Pythonais galite sukurti "null" vertimo lentelę, kurią perduosite vietoj
None
:Čia
string.maketrans
naudojamas vertimo lentelei, kuri yra tiesiog eilutė, kurioje yra simboliai su eilės vertėmis nuo 0 iki 255, sukurti."Python" kalba eilutės yra nekintamos. Metodas
pakeisti
po pakeitimo grąžina naują eilutę. Išbandykite: