如何编写类似于 split() 的函数
How to write a function similar to split()
在我的在线PCAP学习课程中,问了这个问题:
您已经知道 split() 的工作原理。现在我们要你证明这一点。
你的任务是编写你自己的函数,它的行为几乎与原始的 split() 方法完全一样,即:
- 它应该只接受一个参数——一个字符串;
- 它应该return一个从字符串创建的单词列表,在字符串包含空格的地方划分;
- 如果字符串为空,函数应该return一个空列表;
- 它的名字应该是mysplit()
给出的骨架是:
def mysplit(strng):
#
# put your code here
#
print(mysplit("To be or not to be, that is the question"))
print(mysplit("To be or not to be,that is the question"))
print(mysplit(" "))
print(mysplit(" abc "))
print(mysplit(""))
预期输出为:
['To', 'be', 'or', 'not', 'to', 'be,', 'that', 'is', 'the', 'question']
['To', 'be', 'or', 'not', 'to', 'be,that', 'is', 'the', 'question']
[ ]
['abc']
[ ]
这是我想出的代码:
def mysplit(strng):
A = ""
B = []
for i in strng:
if i != " ":
A += i
else:
B.append(A)
A = ""
return(B)
print(mysplit("To be or not to be, that is the question"))
print(mysplit("To be or not to be,that is the question"))
print(mysplit(" "))
print(mysplit(" abc "))
print(mysplit(""))
但是!我的输出非常接近,但我不确定为什么 ("question") 不在那里,以及为什么假定的空列表中有 [" "]...
['To', 'be', 'or', 'not', 'to', 'be,', 'that', 'is', 'the']
['To', 'be', 'or', 'not', 'to', 'be,that', 'is', 'the']
['', '', '']
['', 'abc']
[]
非常感谢任何帮助!!
查看最后一个字符后,没有其他 " "
可以让您 append
找到最后一个词,所以最后一个词(“问题") 未添加。
解决此问题的一种方法是在 for
循环后添加另一个检查以查看是否需要添加最后一个词。
两个问题:
- 您没有将最后一个词附加到
B
,因为您只在遇到 space 时才附加,而字符串末尾没有 space。所以你需要附加最后一个字。
- 当一行中有多个 space 时,每个 space 都会导致您将空的
A
附加到结果。如果它不为空,您应该只附加 A
。
def mysplit(strng):
A = ""
B = []
for i in strng:
if i != " ":
A += i
elif A != "":
B.append(A)
A = ""
# Append last word
if A != "":
B.append(A)
return(B)
假设您的字符串是 X Y
。你循环 strng
。当您遇到 " "
时,您会在列表中追加 X
。然后你迭代 Y
并且 A
变成 Y
。然后循环终止。因此,Y
从未添加到列表中。
要解决此问题,在循环结束后,只需检查 A
是否包含有效(非空)字符串。如果是,追加。如果字符串的最后一个字符是空格,在这种情况下,循环终止后 A
将保留空字符串,并且不会将其添加到列表中。
对于另一个问题," abc "
或 " "
,在追加到列表之前,您可能需要检查 A
它是否为非空字符串。
试试这个 -
def mysplit(strng):
A = ""
B = []
for i in strng:
if i != " ":
A += i
else:
if A: # Check A is indeed a valid string
B.append(A)
A = ""
# After iteration is over check A contains a valid string. If so append
if A:
B.append(A)
return(B)
检查代码中的注释区域
您需要对代码做一些小改动。您正在将字符串添加到列表中,只有您找到 space 字符。所以在字符串的末尾你找不到要添加的 space 字符。
def mysplit(strng):
A = ""
B = []
for i in strng:
if i != " ":
A += i
else:
B.append(A)
A = ""
B.append(A) # Add A when string is completed
return(B)
或者您可以维护相同的代码,但只是在获取作为参数时更改输入字符串
strng = strng + ' '
还注意到您没有考虑字符串中有多个 space 的情况。
在我的在线PCAP学习课程中,问了这个问题:
您已经知道 split() 的工作原理。现在我们要你证明这一点。
你的任务是编写你自己的函数,它的行为几乎与原始的 split() 方法完全一样,即:
- 它应该只接受一个参数——一个字符串;
- 它应该return一个从字符串创建的单词列表,在字符串包含空格的地方划分;
- 如果字符串为空,函数应该return一个空列表;
- 它的名字应该是mysplit()
给出的骨架是:
def mysplit(strng):
#
# put your code here
#
print(mysplit("To be or not to be, that is the question"))
print(mysplit("To be or not to be,that is the question"))
print(mysplit(" "))
print(mysplit(" abc "))
print(mysplit(""))
预期输出为:
['To', 'be', 'or', 'not', 'to', 'be,', 'that', 'is', 'the', 'question']
['To', 'be', 'or', 'not', 'to', 'be,that', 'is', 'the', 'question']
[ ]
['abc']
[ ]
这是我想出的代码:
def mysplit(strng):
A = ""
B = []
for i in strng:
if i != " ":
A += i
else:
B.append(A)
A = ""
return(B)
print(mysplit("To be or not to be, that is the question"))
print(mysplit("To be or not to be,that is the question"))
print(mysplit(" "))
print(mysplit(" abc "))
print(mysplit(""))
但是!我的输出非常接近,但我不确定为什么 ("question") 不在那里,以及为什么假定的空列表中有 [" "]...
['To', 'be', 'or', 'not', 'to', 'be,', 'that', 'is', 'the']
['To', 'be', 'or', 'not', 'to', 'be,that', 'is', 'the']
['', '', '']
['', 'abc']
[]
非常感谢任何帮助!!
查看最后一个字符后,没有其他 " "
可以让您 append
找到最后一个词,所以最后一个词(“问题") 未添加。
解决此问题的一种方法是在 for
循环后添加另一个检查以查看是否需要添加最后一个词。
两个问题:
- 您没有将最后一个词附加到
B
,因为您只在遇到 space 时才附加,而字符串末尾没有 space。所以你需要附加最后一个字。 - 当一行中有多个 space 时,每个 space 都会导致您将空的
A
附加到结果。如果它不为空,您应该只附加A
。
def mysplit(strng):
A = ""
B = []
for i in strng:
if i != " ":
A += i
elif A != "":
B.append(A)
A = ""
# Append last word
if A != "":
B.append(A)
return(B)
假设您的字符串是 X Y
。你循环 strng
。当您遇到 " "
时,您会在列表中追加 X
。然后你迭代 Y
并且 A
变成 Y
。然后循环终止。因此,Y
从未添加到列表中。
要解决此问题,在循环结束后,只需检查 A
是否包含有效(非空)字符串。如果是,追加。如果字符串的最后一个字符是空格,在这种情况下,循环终止后 A
将保留空字符串,并且不会将其添加到列表中。
对于另一个问题," abc "
或 " "
,在追加到列表之前,您可能需要检查 A
它是否为非空字符串。
试试这个 -
def mysplit(strng):
A = ""
B = []
for i in strng:
if i != " ":
A += i
else:
if A: # Check A is indeed a valid string
B.append(A)
A = ""
# After iteration is over check A contains a valid string. If so append
if A:
B.append(A)
return(B)
检查代码中的注释区域
您需要对代码做一些小改动。您正在将字符串添加到列表中,只有您找到 space 字符。所以在字符串的末尾你找不到要添加的 space 字符。
def mysplit(strng):
A = ""
B = []
for i in strng:
if i != " ":
A += i
else:
B.append(A)
A = ""
B.append(A) # Add A when string is completed
return(B)
或者您可以维护相同的代码,但只是在获取作为参数时更改输入字符串
strng = strng + ' '
还注意到您没有考虑字符串中有多个 space 的情况。