列表理解与循环和条件

List comprehension with loop and conditions

我想将此 Python 代码(如下)转换为列表推导式:

def list1(a):
  L = [100]
  n = int((L[0] - a)/0.2)
  for i in range (n):
    var = L[i]-0.2
    var = round(var,2) if var * 100 % 100 != 0 else int(var)
    L.append(var)
  return L

print(list1(25))

我试过了,但没用:

def list2(a):
  L = [100]
  n = int((L[0] - a)/0.2)
  i = 0
  var = L[i]-0.2
  L = [L[i]-0.2 for i in range (n) round(var,2) if (var) * 100 % 100 != 0 else int(var)]
  return L

print(list2(25))

你能帮帮我吗?

您可以在用例中使用 generator expression with list.extend. This approach has no advantages over a for loop and is less readable. Using a single list comprehension is 构建 list 时访问 list

def list2(a):
  L = [100]
  n = int((L[0] - a)/0.2)
  L.extend(round(L[i]-0.2,2) if (L[i]-0.2) * 100 % 100 != 0 else int(L[i]-0.2) for i in range(n))
  return L
list2(25) == list1(25)

输出

True

这是一个列表推导式,可以为您提供相同的结果(但工作方式不同):

def list1(a):
    return [x/5 if x%5 else x//5
            for x in range(500, 5*a-1, -1)]

还有一个与您的 for 循环类似的工作方式:

def list1(a):
  return [round(var,2) if var * 100 % 100 != 0 else int(var)
          for n in [int((100 - a)/0.2)]
          for i in range(1 + n)
          for var in [100 if i == 0 else var-0.2]]

但是那个很老套。如果下一个元素依赖于前一个元素,那么使用 for 循环(在这种情况下甚至是 while 循环)比使用列表理解更好。