Wydaje się, że w Pythonie znajduje się funkcja podciągowa.
Powiedzmy, że chcę wypisać pierwsze 100 znaków w ciągu, jak mogę to zrobić?
Chcę to również zrobić bezpiecznie, stwierdzając, że jeśli ciąg ma 50 znaków, nie powinien zawieść.
Wydaje się, że w Pythonie znajduje się funkcja podciągowa.
Powiedzmy, że chcę wypisać pierwsze 100 znaków w ciągu, jak mogę to zrobić?
Chcę to również zrobić bezpiecznie, stwierdzając, że jeśli ciąg ma 50 znaków, nie powinien zawieść.
Odpowiedzi:
print my_string[0:100]
print 'foo'[:100](uwaga, len('foo')to jest 3, więc nawet jeśli foo[100]nie działa, działa)
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.
Więc jest bezpieczny w użyciu x[:100].
Odpowiadając na obawy Filipa (w komentarzach), krojenie działa również w przypadku ciągów znaków Unicode
>>> greek=u"αβγδεζηθικλμνξοπρςστυφχψω"
>>> print len(greek)
25
>>> print greek[:10]
αβγδεζηθικ
Jeśli chcesz uruchomić powyższy kod jako skrypt, umieść tę linię na górze
# -*- coding: utf-8 -*-
Jeśli twój edytor nie zapisuje w utf-8, zastąp poprawne kodowanie
ςi σsą to te same litery :-)
greek_alphabetwtedy 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:
if len(s) <= 100:
print s
else:
print "%s..."%(s[:97])
I tak, wiem, że ()w tym przypadku jest to zbędne dla %operatora formatującego, to po prostu mój styl.
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.
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.
>>> '%s' % '12345'
'12345'
'%.3s' określa użycie tylko pierwszych trzech znaków.
>>> '%.3s' % '12345'
'123'
'%.7s'mówi, żeby użyć pierwszych siedmiu znaków, ale jest ich tylko pięć. Nie ma problemu.
>>> '%.7s' % '12345'
'12345'
'%7s' wykorzystuje do siedmiu znaków, wypełniając brakujące znaki spacjami po lewej stronie.
>>> '%7s' % '12345'
' 12345'
'%-7s' to ta sama rzecz, z wyjątkiem uzupełniania brakujących znaków po prawej stronie.
>>> '%-7s' % '12345'
'12345 '
'%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.
>>> '%5.3s' % '12345'
' 123'
To samo z wyjątkiem wypełnienia po prawej stronie.
>>> '%-5.3s' % '12345'
'123 '
Obsługuje również wiele argumentów!
>>> 'do u no %-4.3sda%3.2s wae' % ('12345', 6789)
'do u no 123 da 67 wae'
Jeśli potrzebujesz jeszcze większej elastyczności, str.format()jest również dostępny. Oto dokumentacja dla obu.
[start:stop:step]
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.