Sự cố: chia chuỗi thành danh sách các từ theo ký tự dấu tách được chuyển vào dưới dạng danh sách.vấn đề tách chuỗi
String: "After the flood ... all the colors came out."
đầu ra mong muốn: ['After', 'the', 'flood', 'all', 'the', 'colors', 'came', 'out']
Tôi đã viết hàm sau - lưu ý Tôi biết rằng có những cách tốt hơn để chia một chuỗi sử dụng một số trăn được xây dựng trong các chức năng nhưng vì lợi ích của học tôi nghĩ tôi sẽ tiến hành theo cách này:
def split_string(source,splitlist):
result = []
for e in source:
if e in splitlist:
end = source.find(e)
result.append(source[0:end])
tmp = source[end+1:]
for f in tmp:
if f not in splitlist:
start = tmp.find(f)
break
source = tmp[start:]
return result
out = split_string("After the flood ... all the colors came out.", " .")
print out
['After', 'the', 'flood', 'all', 'the', 'colors', 'came out', '', '', '', '', '', '', '', '', '']
tôi không thể tìm ra lý do tại sao "bước ra" không được chia thành "đến" và "ra" như hai từ riêng biệt. Nó giống như thể nhân vật khoảng trống giữa hai từ đang bị bỏ qua. Tôi nghĩ phần còn lại của đầu ra là rác xuất phát từ vấn đề liên quan đến vấn đề "xuất hiện".
EDIT:
Tôi đi theo @ IVC đề nghị và đã đưa ra đoạn mã sau:
def split_string(source,splitlist):
result = []
lasti = -1
for i, e in enumerate(source):
if e in splitlist:
tmp = source[lasti+1:i]
if tmp not in splitlist:
result.append(tmp)
lasti = i
if e not in splitlist and i == len(source) - 1:
tmp = source[lasti+1:i+1]
result.append(tmp)
return result
out = split_string("This is a test-of the,string separation-code!"," ,!-")
print out
#>>> ['This', 'is', 'a', 'test', 'of', 'the', 'string', 'separation', 'code']
out = split_string("After the flood ... all the colors came out.", " .")
print out
#>>> ['After', 'the', 'flood', 'all', 'the', 'colors', 'came', 'out']
out = split_string("First Name,Last Name,Street Address,City,State,Zip Code",",")
print out
#>>>['First Name', 'Last Name', 'Street Address', 'City', 'State', 'Zip Code']
out = split_string(" After the flood ... all the colors came out...............", " ."
print out
#>>>['After', 'the', 'flood', 'all', 'the', 'colors', 'came', 'out']
Cảm ơn tất cả vì những giải pháp tuyệt vời. Tôi đã đi với điều này bởi vì nó buộc tôi phải học logic thay vì sử dụng các hàm dựng sẵn. Rõ ràng, nếu tôi viết mã thương mại, tôi sẽ không tái phát minh ra bánh xe nhưng vì mục đích học tập, tôi sẽ đi với câu trả lời này. Cảm ơn mọi sự giúp đỡ của bạn. – codingknob