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