Python检查lis中接下来的三个元素

2024-06-17 11:10:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我不确定是否有人问过这个问题,但我在问题列表中找不到类似的问题。我想检查一个列表是否有一组按一定顺序排列的三个值。例如,我想检查一个int列表是否在该列表中的任何位置有一组值1、2、3。列表的长度未知,无法排序。在

示例:

Values to check: 1, 2, 3 (in this order)
Example of a list = [1, 1, 2, 3, 1]

到目前为止,我一直在努力。在

^{pr2}$

列表1-->return True list2--->;索引器错误:列表索引超出范围

编辑:感谢回答的人,并感谢你列出了子列表问题。我从来没有想过整数集可以被看作是一个子列表,并用它来与一个更大的列表进行比较。在


Tags: oftoin示例列表return排序example
3条回答

i + 2在循环体中太大,nums没有那么多元素。像这样修复它:

if i + 2 < len(nums) and (nums[i+2] - nums[i+1] == nums[i+1] - nums[i]) == 1:
    ...

看起来你在搜索列表中的序列。在

你可以将列表的部分内容与序列进行比较。在

def find_sequence_in_list(list_to_check, values):
    for i in range (len(list_to_check) - len(values) + 1):
        #print(list_to_check[i:i + len(values)])
        if list_to_check[i:i + len(values)] == values:
            return True

    return False

values = [1, 2, 3]
data1 = [1, 1, 2, 3, 1]
data2 = [1, 1, 4, 3, 1, 2, 1]

print(find_sequence_in_list(data1, values))
print(find_sequence_in_list(data2, values))

取消对print的注释以查看发生了什么。在

您可以直接使用元组比较和zip迭代(或者itertools.izip,如果您愿意,对于一般的iterable):

>>> def findin(values, nums):
...     t = tuple(values)
...     return any(T == t for T in zip(*(nums[i:] for i in xrange(values))))

举例来说:

^{pr2}$

相关问题 更多 >