我是Python的新手,而且在很大程度上是编程新手。所以,如果这个问题听起来很基本,我很抱歉:
我只是尝试编写一个Python3函数,如果列表中存在特定的数字序列,则该函数返回true,而不管这些数字是否背靠背。例如,假设'0,0,7‘,但是这些特定的数字可能嵌入到一个更大的列表中,比如4,0,5,0,6,7。
我可以编写许多其他处理列表的函数,但这个问题让我感到困惑,因为数字的位置不是固定的。
我在for循环中尝试了len(range),但是我得到了语法错误,并且也不能理解逻辑。有人能帮上忙吗?
发布于 2018-08-06 08:45:39
您可以通过首先过滤掉大列表中不在子列表中的项目来创建过滤列表,这样您就可以在滚动窗口中轻松地迭代大列表以匹配子列表:
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
发布于 2018-08-06 08:53:49
一种简洁且相对有效的解决方案是遍历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
False`.
https://stackoverflow.com/questions/51699283
复制相似问题