对于这个函数,当一个序列具有连续的相同字符时,我试图让它返回“True”,并且当序列没有时返回“False”。例如,neighboring_twins(1,2,1,4,1)
应该返回False
而neighboring_twins(1,2,3,3,5)
应该返回True
,因为有两个相同的字符直接相邻(两个3)。
这是我到目前为止的代码。我不认为Python搜索"ii"
是正确的方法,因为我不断收到语法错误。我不确定如何指示Python搜索连续的相同字符但假设我应该使用for循环。
def neighboring_twins(xs):
for i in xs:
if ii = True
return True
elif ii = False
return False
编辑:我想在不从其他模块导入的情况下以最简单的方式完成此任务。
答案 0 :(得分:0)
来自itertools' recipies的pairwise
函数将返回连续项对的列表。从现在开始,您只需要清楚地了解您的需求:
from itertools import tee, izip
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return izip(a, b)
def neighboring_twins(xs):
return any([x for x in pairwise(xs) if x[0]==x[1]])
或者,直接,不复制pairwise
:
from itertools import tee, izip
def neighboring_twins(xs):
a, b = tee(xs)
next(b, None)
return any([x for x in izip(a, b) if x[0]==x[1]])
修改强>
您可以在不使用itertools的情况下实现相同的功能,尽管性能会有所下降:
def neighboring_twins(xs):
return any([x for x in zip(xs, xs[1::]) if x[0]==x[1]])
答案 1 :(得分:0)
您遇到语法错误,因为if ii
要求Python解释器检查变量ii
并查看它是否为真。我建议迭代列表并检查下一个元素,看它是否等于下一个元素。 enumerate()
对您有用。
我还注意到您正在使用if ii = True
,它将True值分配给ii而不是检查ii
是否为True。你可能想要if ii == True
。 ==
检查相等性和单个等号为变量赋值。