我是Python的新手,大部分时间都是编程的新手。抱歉,如果这个问题听起来很简单:
我只是想编写一个Python 3函数,如果列表中存在特定的数字序列,则无论该数字是背靠背还是返回,都将返回true。例如,假设“ 0,0,7”,但是这些特定数字可能会嵌入更大的列表中,例如[4,0,5,0,6,7]。
我可以编写许多其他与列表一起使用的函数,但是这个问题困扰我,因为数字的位置不固定。
我曾在for循环中尝试过len(range),但遇到语法错误,也无法遵循逻辑。有人可以帮忙吗?
答案 0 :(得分:0)
您可以通过以下方法创建过滤列表:首先过滤掉大列表中不在子列表中的项目,这样您就可以轻松地在滚动窗口中迭代大列表以匹配子列表:< / p>
def is_in(sublist, large_list):
subset = set(sublist)
filtered = [i for i in large_list if i in subset]
for i in range(len(filtered) - len(sublist) + 1):
if filtered[i : i + len(sublist)] == sublist:
return True
return False
print(is_in([0, 0, 7], [4,0,5,0,6,7]))
print(is_in([0, 0, 7], [4,0,5,6,7]))
这将输出:
True
False
答案 1 :(得分:0)
一种紧凑且相对有效的解决方案是遍历needle
的元素,并始终尝试将其首次出现在haystack
的其余部分中:
def istherehidden(needle,haystack):
hsp=0
try:
for i in needle:
hsp+=1+haystack[hsp:].index(i)
return True
except ValueError:
return False
现在istherehidden([4,5,7],[4,0,5,0,6,7])
返回True
,然后istherehidden([5,4,7],[4,0,5,0,6,7])returns
为假。 / p>