def sucontain(A):
C = A.split()
def magic(x):
B = [C[i]==C[i+1] for i in range(len(C)-1)]
return any(B)
N = [x for x in C if magic(x)]
return N
Phrase = "So flee fleeting candy can and bandage"
print (sucontain(Phrase))
此功能的目标是创建每个连续单词内的单词列表。例如,该功能将采用字符串“”所以逃离转瞬即逝的糖果罐头和绷带“作为输入和返回['逃离','和']因为逃离在里面转瞬即逝(下一个字)和'和'在'绷带'里面如果没有找到这样的案例,应该返回一个空列表[]。我的代码现在返回[]而不是['flee','和']。有人可以指出我做错了吗?谢谢你
答案 0 :(得分:7)
只需将连续的单词配对,然后它就变成了一个简单的列表理解...
>>> s = "So flee fleeting candy can and bandage"
>>> words = s.split()
>>> [i for i, k in zip(words, words[1:]) if i in k]
['flee', 'and']
答案 1 :(得分:2)
您的magic
功能肯定有问题。它接受x
作为参数但不在任何地方使用它。
这是一个不使用附加功能的替代版本:
def sucontain(A):
C = A.split()
return [w for i, w in enumerate(C[:-1]) if w in C[i+1]]
enumerate()
函数允许我们将索引和值循环在一起,这使得它非常直接地执行测试。 C[i+1]
是下一个值,w
是当前值,因此w in C[i+1]
会检查当前值是否包含在下一个值中。我们使用C[:-1]
来确保我们在最后一项之前停止一个,否则C[i+1]
将导致IndexError。
答案 2 :(得分:0)
展望未来可能会有问题。不是测试当前单词是否在下一个单词中,而是检查上一个单词是否在当前单词中。这几乎总能使事情变得更简单。
此外,使用描述性变量名称代替C
和A
以及x
和B
以及N
和magic
。
def succotash(text): # okay, so that isn't very descriptive
lastword = " " # space won't ever be in a word
results = []
for currentword in text.split():
if lastword in currentword:
results.append(currentword)
lastword = currentword
return results
print succotash("So flee fleeting candy can and bandage")