Dường như có thể tìm thấy một hàm chuỗi con trong python.
Giả sử tôi muốn xuất ra 100 ký tự đầu tiên trong một chuỗi, làm cách nào để làm điều này?
Tôi cũng muốn làm điều đó một cách an toàn, lặp lại nếu chuỗi có 50 ký tự thì nó sẽ không bị lỗi.
Dường như có thể tìm thấy một hàm chuỗi con trong python.
Giả sử tôi muốn xuất ra 100 ký tự đầu tiên trong một chuỗi, làm cách nào để làm điều này?
Tôi cũng muốn làm điều đó một cách an toàn, lặp lại nếu chuỗi có 50 ký tự thì nó sẽ không bị lỗi.
Câu trả lời:
print my_string[0:100]
print 'foo'[:100](lưu ý rằng len('foo')là 3, vì vậy ngay cả khi foo[100]không làm việc, nó không)
Từ hướng dẫn python :
Các chỉ số của lát cắt tạo ra được xử lý một cách duyên dáng: một chỉ mục quá lớn được thay thế bằng kích thước chuỗi , giới hạn trên nhỏ hơn giới hạn dưới trả về một chuỗi trống.
Vì vậy, nó là an toàn để sử dụng x[:100].
Để giải đáp mối quan tâm của Philipp (trong phần bình luận), việc cắt lát cũng hoạt động tốt đối với các chuỗi unicode
>>> greek=u"αβγδεζηθικλμνξοπρςστυφχψω"
>>> print len(greek)
25
>>> print greek[:10]
αβγδεζηθικ
Nếu bạn muốn chạy đoạn mã trên dưới dạng tập lệnh, hãy đặt dòng này ở đầu
# -*- coding: utf-8 -*-
Nếu trình chỉnh sửa của bạn không lưu trong utf-8, hãy thay thế mã hóa chính xác
ςvà σlà cùng một lá thư :-)
greek_alphabetsau đó :)
Việc cắt các mảng được thực hiện với [first:last+1].
Một mẹo mà tôi có xu hướng sử dụng nhiều là chỉ ra thông tin bổ sung bằng dấu chấm lửng. Vì vậy, nếu trường của bạn là một trăm ký tự, tôi sẽ sử dụng:
if len(s) <= 100:
print s
else:
print "%s..."%(s[:97])
Và vâng, tôi biết ()là không cần thiết trong trường hợp này đối với %toán tử định dạng, đó chỉ là phong cách của tôi.
Hầu hết các ví dụ trước sẽ nêu ra một ngoại lệ trong trường hợp chuỗi của bạn không đủ dài.
Một cách tiếp cận khác là sử dụng
'yourstring'.ljust(100)[:100].strip().
Điều này sẽ cung cấp cho bạn 100 ký tự đầu tiên. Bạn có thể nhận được một chuỗi ngắn hơn trong trường hợp các ký tự cuối cùng của chuỗi của bạn là khoảng trắng.
Sử dụng định dạng chuỗi %là một cách tuyệt vời để xử lý điều này. Đây là một số ví dụ.
Mã định dạng '%s'chuyển đổi '12345'thành một chuỗi, nhưng nó đã là một chuỗi.
>>> '%s' % '12345'
'12345'
'%.3s' chỉ định chỉ sử dụng ba ký tự đầu tiên.
>>> '%.3s' % '12345'
'123'
'%.7s'cho biết sử dụng bảy ký tự đầu tiên, nhưng chỉ có năm ký tự. Không vấn đề gì.
>>> '%.7s' % '12345'
'12345'
'%7s' sử dụng tối đa bảy ký tự, điền các ký tự bị thiếu vào khoảng trống ở bên trái.
>>> '%7s' % '12345'
' 12345'
'%-7s' là điều tương tự, ngoại trừ việc điền các ký tự còn thiếu ở bên phải.
>>> '%-7s' % '12345'
'12345 '
'%5.3' cho biết sử dụng ba ký tự đầu tiên, nhưng điền vào khoảng trống ở bên trái để có tổng cộng năm ký tự.
>>> '%5.3s' % '12345'
' 123'
Điều tương tự ngoại trừ điền vào bên phải.
>>> '%-5.3s' % '12345'
'123 '
Có thể xử lý nhiều đối số quá!
>>> 'do u no %-4.3sda%3.2s wae' % ('12345', 6789)
'do u no 123 da 67 wae'
Nếu bạn yêu cầu sự linh hoạt hơn nữa, str.format()cũng có sẵn. Đây là tài liệu cho cả hai.
[start:stop:step]
Vì vậy, Nếu bạn chỉ muốn lấy 100 ký tự đầu tiên, hãy sử dụng your_string[0:100]hoặc your_string[:100]
Nếu bạn muốn chỉ lấy ký tự ở vị trí chẵn, hãy sử dụng your_string[::2]
"Giá trị mặc định" cho bắt đầu là 0, cho điểm dừng - len của chuỗi và cho bước - 1. Vì vậy khi bạn không cung cấp một trong số nó và đặt ':', nó sẽ sử dụng giá trị mặc định.