【问题标题】:Total no of sets in a list where a set is atleast 3 consecutive even numbers?一个集合至少有 3 个连续偶数的列表中的集合总数?
【发布时间】:2020-05-10 11:30:17
【问题描述】:

如果我有一个整数列表,并且我想在该列表中查找集合的总数,其中集合至少是 3 个连续的偶数?

例如: list1 = [1,2,4,6,8,11,2,8] 有 1 个这样的集合,因为只有 1 个集合 (2,4,6,8) 至少有 3 个连续的偶数

我的做法:

list1 = [1,2,4,6,8,11,2,8]
SetofEven = 0
for i in range(0,len(list1)-2):
    a, b, c = list1[i:i+3]
    if a%2 == b%2 == c%2 == 0:
        SetofEven = SetofEven + 1

第一次我想找到只有 3 个连续偶数的集合,然后以此为基础。不知道如何解决问题的至少 3 部分!!

【问题讨论】:

    标签: python list numbers


    【解决方案1】:

    &按位 AND 运算符,而不是逻辑运算符。您正在寻找的是这样的条件:

    if a % 2 == b % 2 == c % 2 == 0
    

    或者像这样:

    if a % 2 == 0 and b % 2 == 0 and c % 2 == 0
    

    与 C++ 等语言相反,其中 logical AND 使用 && 运算符,而在 Python 中则使用 and

    编辑:至于问题的第二部分,我认为这种方法不会有成效,因为这样的循环显示了长度为 3 的重叠序列。你最好使用itertools.groupby

    from itertools import groupby
    
    # list of pairs (True/False, list of numbers)
    groups = groupby(list1, lambda x: x % 2 == 0)
    
    count = 0
    for even, sequence in groups:
        if even and len(list(sequence)) >= 3:
            count += 1
    

    groupby 根据谓词对序列进行分组,所以对于

    >>> list1 = [1, 2, 4, 6, 8, 11, 2, 8]
    >>> list(groupby(list1, lambda x: x % 2 == 0))
    [(False, [1]), (True, [2, 4, 6, 8]), (False, [11]), (True, [2, 8])]
    # actually the second elements in pairs are not lists but iterators, but their contents are the same
    

    【讨论】:

    • 我应该如何解决问题的至少 3 部分?
    • @JapnitSethi 我使用groupby添加了一个示例解决方案
    【解决方案2】:

    对于问题的第二部分,您可以使用计数器来计算列表中连续的偶数。如果数字不是偶数,您可以将计数重置为 0。如果计数器为 3,则您已达到至少 3 个连续事件,您可以添加到您的事件计数集。

    见下文:

    list1 = [1,2,4,6,8,11,2,8]
    SetofEven = 0
    count = 0
    for i in range(0, len(list1)):
        if list1[i] % 2 == 0:
            count += 1
        else:
            count = 0
        # Only increment set of even count once if 3 is reached
        if count == 3:
            SetofEven += 1
    
    print(SetOfEven)
    # Prints 1
    

    提取集合

    如果您还想要数字集而不仅仅是计数,您可以通过检查计数是否大于 0 从我的答案中的 else 子句中获取它:

    my_evens_list = []
    
    # ...
    
    else:
        if count > 0:
            my_evens_list.append(list1[i - count:i])
        count = 0
    
    # ...
    
    

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 2019-04-11
      • 2021-07-05
      相关资源
      最近更新 更多