获取列表中的数字序列

时间:2015-07-25 02:13:31

标签: python sequence

我有一个列表[3,6,9,15,24,27,30,33]。我要做的是得到一个数字序列,该数字是3的倍数,等于或超过3个项目。如果我们基于列表,程序应该[3,6,9] [24,27,30,33]这可能吗?

3 个答案:

答案 0 :(得分:1)

根据我的理解,您希望 子列表具有3的连续倍数 (您从结果中省略15的原因) < strong> ,子列表的大小大于或等于3.

虽然FMc的答案是正确的,但它会考虑15,答案应该是[3, 6, 9][24, 27, 30, 33]

所以只是扩展他的答案:

def multiples_of_min_length(xs, factor, min_len):
    ys = []
    for x in xs:
        if x % factor == 0 and len(ys) == 0:
            ys.append(x)
        elif x % factor == 0 and (x - ys[-1] == 3):
            ys.append(x)
        else:
            if len(ys) >= min_len:
                yield ys
            ys = []
    if len(ys) >= min_len:
        yield ys

xs = [3,6,9, 15,17,19, 24,27,30,33, 39,47, 54,57,60]

fin_sublists = []
for ys in multiples_of_min_length(xs, 3, 3):
    fin_sublists.append(ys)

fin_sublists

<强>输出

[[3, 6, 9], [24, 27, 30, 33], [54, 57, 60]]

答案 1 :(得分:0)

在这个示例中检查三的倍数是没有意义的,因为它将返回列表中的每个项目,因为每个项目是三的倍数。但是,您可以使用filter

进行检查
list_to_check = [3,6,9,15,24,27,30,33]
multiples = filter(lambda x: x%3==0, list_to_check)

但问题的第二部分没有意义。

答案 2 :(得分:0)

my_list = [3,6,9,15,24,27,30,33]

new_list = []

list_of_lists = []

for item in my_list:
    if item % 3 == 0:
        if (len(new_list) == 0):
            new_list.append(item)
        else:
            if (item - new_list[-1]) == 3:
                new_list.append(item)
            else:
                if len(new_list) > 2:
                     list_of_lists.append(new_list)
                new_list = []
                new_list.append(item)

if len(new_list) > 2:
    list_of_lists.append(new_list)



print list_of_lists # or print(list_of_lists) for Python 3.x