For循环只能处理两个步骤

时间:2017-10-16 16:16:06

标签: python python-3.x

我尝试从最大值开始获取l2中的数字,并且每对减去的数量应该大于或等于2.这种情况仅在l1具有多于1个元素时才有效。因此,对于l2 = [2,1,8,3,6,4],期望输出为l1 = [8,6,4],因为4-3 <2,将不会采用第四大3。这是我的代码

l2=[2,1,8,3,6,4]
l1=[]
def check():        
    i = max(l2)
    l2.remove(i)
    if len(l1)>1:
        for number in l1:
            if (abs(number - i)) < int(2):
                break;
    else:
        l1.append(i)
        check()

但输出是[8,6]。任何人都可以告诉我如何纠正它?

2 个答案:

答案 0 :(得分:1)

如果我理解你想要的是这个:

l2=[2,1,8,3,6,4]
l1=[]
def check():
    i = max(l2)
    l2.remove(i)
    if len(l1) > 0:
        for number in l1:
            if abs(number - i) < 2:
                return l1
    l1.append(i)
    check()

答案 1 :(得分:0)

希望这可以解决您的问题:

  1 l2 = [2, 1, 8, 3, 6, 4]
  2 
  3 def generate_l1(l):
  4     copy = list(l)
  5     result = []
  6     result.append(max(copy))
  7     copy.remove(max(copy))
  8     while result[len(result) - 1] - max(copy) >= 2:
  9         result.append(max(copy))
 10         copy.remove(max(copy))                                                                                                                                                   
 11     return result
 12 
 13 print(generate_l1(l2))

函数generate_l1从给定列表l生成预期列表,而不修改原始列表l2