Con trăn có tích hợp (có nghĩa là trong các thư viện chuẩn) để thực hiện chia tách các chuỗi tạo ra một trình lặp hơn là một danh sách không? Tôi có trong tâm trí làm việc trên dây rất dài và không cần phải tiêu thụ hầu hết các chuỗi.Tách một chuỗi thành một bộ lặp
Trả lời
Không tách chuỗi trực tiếp như vậy, nhưng mô-đun re
có re.finditer()
(và tương ứng finditer()
phương pháp trên bất kỳ cụm từ thông dụng được biên dịch nào).
@Zero hỏi cho một ví dụ:
>>> import re
>>> s = "The quick brown\nfox"
>>> for m in re.finditer('\S+', s):
... print(m.span(), m.group(0))
...
(0, 3) The
(4, 9) quick
(13, 18) brown
(19, 22) fox
Giống như S. Lott, tôi hoàn toàn không biết những gì bạn muốn. Đây là mã có thể giúp:
s = "This is a string."
for character in s:
print character
for word in s.split(' '):
print word
Ngoài ra còn có s.index() và s.find() để tìm ký tự tiếp theo.
Sau đó: Ok, một cái gì đó như thế này.
>>> def tokenizer(s, c):
... i = 0
... while True:
... try:
... j = s.index(c, i)
... except ValueError:
... yield s[i:]
... return
... yield s[i:j]
... i = j + 1
...
>>> for w in tokenizer(s, ' '):
... print w
...
This
is
a
string.
Xem làm rõ trong các ý kiến. Điều này không trả lời câu hỏi. – marcog
Anh ấy cũng yêu cầu một cách rõ ràng * được xây dựng trong * –
@ 7vies: Tôi nghĩ điều này tốt hơn là nói "Không" hoặc nói "Sử dụng cụm từ thông dụng (tức là câu trả lời ở trên)". – hughdbrown
Bạn có thể sử dụng giống như SPARK (đã được hấp thụ vào phân phối Python bản thân, mặc dù không thể nhập cảng từ thư viện tiêu chuẩn), nhưng cuối cùng nó sử dụng biểu thức thông thường cũng vì vậy Duncan's answer có thể sẽ phục vụ quý khách chỉ cần cũng nếu nó dễ dàng như chỉ "chia nhỏ trên khoảng trắng".
Tùy chọn khác, khó khăn hơn nhiều là viết mô-đun Python của riêng bạn trong C để thực hiện nếu bạn thực sự muốn tốc độ, nhưng đó là thời gian đầu tư lớn hơn nhiều.
Nếu bạn không cần phải tiêu thụ toàn bộ chuỗi, đó là bởi vì bạn đang tìm kiếm một cái gì đó cụ thể, phải không? Sau đó, chỉ cần tìm điều đó, với re
hoặc .find()
thay vì tách. Bằng cách đó bạn có thể tìm thấy một phần của chuỗi mà bạn quan tâm và tách nó ra.
Trong ứng dụng tôi đã nghĩ, tôi muốn chia nhỏ khoảng trắng, kiểm tra chuỗi con thứ ba, tùy thuộc vào thứ gì, kiểm tra chuỗi con thứ tư hoặc thứ sáu, và sau đó có thể xử lý phần còn lại của chuỗi. –
ẩn dụ @pythonic: Vâng, nếu chuỗi đó là * thực sự * dài bạn có thể muốn sử dụng 're' hoặc' find'. Trong trường hợp khác, chỉ cần phân chia nó trên khoảng trắng. Tôi không biết, nhưng với tôi câu hỏi của bạn có vẻ như nó có thể được tối ưu hóa sớm. ;) Vì vậy, bạn phải cấu hình nó để chắc chắn. –
ẩn dụ @pythonic: Đối với văn bản bình thường chỉ là tối ưu hóa sớm. Văn bản bắt đầu là "lớn" ở đâu đó >> 10MB. Đối với ứng dụng bạn mô tả tôi chỉ cần đi với 'text.split (None, 6)' để có được 6 từ đầu tiên. Nếu bạn phải chia toàn bộ văn bản anyways chỉ cần làm điều đó ngay lập tức. –
Nhìn vào itertools
. Nó chứa những thứ như takewhile
, islice
và groupby
cho phép bạn cắt một vòng lặp - một chuỗi có thể lặp lại - thành một biến thể khác dựa trên các chỉ mục hoặc một điều kiện boolean của các loại.
Không có tích hợp dựa trên bộ lặp tương tự của str.split
. Tùy thuộc vào nhu cầu của bạn, bạn có thể tạo ra một danh sách iterator:
iterator = iter("abcdcba".split("b"))
iterator
# <list_iterator at 0x49159b0>
next(iterator)
# 'a'
Tuy nhiên, một công cụ từ thư viện của bên thứ ba này có khả năng cung cấp những gì bạn muốn, more_itertools.split_at
. Xem thêm this post để biết ví dụ.
- 1. C++: tách một chuỗi thành một mảng
- 2. Tách một chuỗi thành 2 trong Python
- 3. tách một chuỗi dài thành chuỗi nhỏ
- 4. Tách một chuỗi thành hai phần
- 5. Tách một chuỗi thành các cặp
- 6. tách một chuỗi lớn thành các mục SET
- 7. tách một chuỗi thành khối n-chiều dài trong Java
- 8. Làm thế nào để tách một chuỗi được phân tách thành một mảng trong awk?
- 9. Tách chuỗi thành mảng
- 10. tách và concatenating một chuỗi
- 11. Tách một chuỗi trong VB.NET
- 12. Tách một chuỗi thành các từ và dấu chấm câu
- 13. tách một chuỗi dài biến thành nhiều bộ phận trong python
- 14. Tách chuỗi thành chuỗi [] theo một khoảng thời gian nhưng trả về một mảng trống
- 15. Tách một tuple thành nhiều bộ dữ liệu trong Pig
- 16. tách một chuỗi với hoa
- 17. Tách một chuỗi trong Java
- 18. Tách chuỗi thành mảng Shellscript
- 19. Cách tách một chuỗi không có dấu tách liên tục
- 20. Tách chuỗi thành các từ
- 21. Cách tách chuỗi thành mảng trong PostScript
- 22. Cách tách nội dung chuỗi thành một chuỗi các chuỗi trong PowerShell?
- 23. Cần một thuật toán để tách một chuỗi số
- 24. chuỗi tách dựa trên một delimiter
- 25. Làm thế nào để tách một chuỗi thành một danh sách?
- 26. Grails: Tách một chuỗi có chứa một đường ống
- 27. Làm thế nào để tách một chuỗi thành các chuỗi có chiều dài nhất định?
- 28. Lặp đi lặp lại một chuỗi lặp đi lặp lại
- 29. tách một chuỗi với nhiều không gian
- 30. Tách một chuỗi trong Java ném PatternSyntaxException
"không cần thiết để tiêu thụ phần lớn chuỗi"? Điều đó có nghĩa là gì? Đối tượng chuỗi là tất cả trong bộ nhớ, phải không? Vì nó là tất cả trong bộ nhớ, và nó đã là một chuỗi, không có gì cần thiết để lặp qua các ký tự. Bạn có thể vui lòng xác định ý của bạn bằng "không cần thiết để tiêu thụ hầu hết chuỗi" không? –
Có, chuỗi đã có trong bộ nhớ. Nhưng tôi không cần phải đi qua toàn bộ chuỗi để tìm ra nơi để chia tách hoặc để tạo ra các chất nền kết quả từ sự phân chia. –
Có lẽ bạn cần một tokeniser hoặc máy quét của một số loại mà cung cấp một iterator. Câu trả lời dưới đây với giải pháp biểu thức chính quy có thể hoạt động. –