Co masz na myśli mówiąc o „postaciach”? Punkty kodowe, klastry grafemowe czy jednostki kodu? Cięcie na plasterki będzie liczyć jednostki kodu, co może nie dać pożądanego wyniku.
Zdegenerowane indeksy wycinków są obsługiwane z wdziękiem: indeks, który jest zbyt duży, jest zastępowany rozmiarem łańcucha , górna granica mniejsza niż dolna zwraca pusty ciąg.
Myślę, że miało to dać do myślenia, ale w przypadku PO prawdopodobnie nie sugerowałbym tego robić. Rezultatem byłby ciąg, który musiałbyś sprawdzić pod kątem zawartości, aby dalej przyciąć lub coś w tym rodzaju. W tym przypadku wyobrażam sobie, że ktoś chciałby, aby ta liczba była zmienna, a wynik zawsze był poprawny, albo liczba została ustalona, a obsługa albo dałaby coś znaczącego, albo błąd, albo zwracał wdzięcznie w przypadku niepowodzenia. Nie przychodzi mi do głowy wiele przypadków innych niż dostarczanie informacji czytelnych dla człowieka, w których chciałbym arbitralnie dodać tekst do ciągu.
3
Większość poprzednich przykładów zgłosi wyjątek w przypadku, gdy twój łańcuch nie jest wystarczająco długi.
Innym podejściem jest użycie
'yourstring'.ljust(100)[:100].strip().
To da ci pierwsze 100 znaków. Możesz otrzymać krótszy ciąg w przypadku, gdy ostatnie znaki są spacjami.
Więc jeśli chcesz wziąć tylko 100 pierwszych znaków, użyj your_string[0:100]lub your_string[:100]
Jeśli chcesz wziąć tylko znak na parzystej pozycji, użyj your_string[::2]
"Wartości domyślne" dla początku to 0, dla stop - długość ciągu, a dla kroku - 1. Więc jeśli nie podasz żadnego z nich i wstawisz ':', użyje wartości domyślnej.
Odpowiedzi:
źródło
print 'foo'[:100]
(uwaga,len('foo')
to jest 3, więc nawet jeślifoo[100]
nie działa, działa)Z samouczka Pythona :
Więc jest bezpieczny w użyciu
x[:100]
.źródło
Łatwo:
źródło
Odpowiadając na obawy Filipa (w komentarzach), krojenie działa również w przypadku ciągów znaków Unicode
Jeśli chcesz uruchomić powyższy kod jako skrypt, umieść tę linię na górze
Jeśli twój edytor nie zapisuje w utf-8, zastąp poprawne kodowanie
źródło
ς
iσ
są to te same litery :-)greek_alphabet
wtedy zmiennej :)Cięcie tablic jest wykonywane za pomocą
[first:last+1]
.Jedną sztuczką, której często używam, jest wskazanie dodatkowych informacji za pomocą elips. Tak więc, jeśli twoje pole ma sto znaków, użyłbym:
I tak, wiem, że
()
w tym przypadku jest to zbędne dla%
operatora formatującego, to po prostu mój styl.źródło
Większość poprzednich przykładów zgłosi wyjątek w przypadku, gdy twój łańcuch nie jest wystarczająco długi.
Innym podejściem jest użycie
'yourstring'.ljust(100)[:100].strip()
.To da ci pierwsze 100 znaków. Możesz otrzymać krótszy ciąg w przypadku, gdy ostatnie znaki są spacjami.
źródło
Formatowanie ciągów znaków przy użyciu
%
jest świetnym sposobem radzenia sobie z tym. Oto kilka przykładów.Kod formatujący jest
'%s'
konwertowany'12345'
na ciąg, ale jest to już ciąg.'%.3s'
określa użycie tylko pierwszych trzech znaków.'%.7s'
mówi, żeby użyć pierwszych siedmiu znaków, ale jest ich tylko pięć. Nie ma problemu.'%7s'
wykorzystuje do siedmiu znaków, wypełniając brakujące znaki spacjami po lewej stronie.'%-7s'
to ta sama rzecz, z wyjątkiem uzupełniania brakujących znaków po prawej stronie.'%5.3'
mówi, że użyj pierwszych trzech znaków, ale wypełnij go spacjami po lewej stronie, aby uzyskać łącznie pięć znaków.To samo z wyjątkiem wypełnienia po prawej stronie.
Obsługuje również wiele argumentów!
Jeśli potrzebujesz jeszcze większej elastyczności,
str.format()
jest również dostępny. Oto dokumentacja dla obu.źródło
Więc jeśli chcesz wziąć tylko 100 pierwszych znaków, użyj
your_string[0:100]
lubyour_string[:100]
Jeśli chcesz wziąć tylko znak na parzystej pozycji, użyjyour_string[::2]
"Wartości domyślne" dla początku to 0, dla stop - długość ciągu, a dla kroku - 1. Więc jeśli nie podasz żadnego z nich i wstawisz ':', użyje wartości domyślnej.źródło