列表理解与循环和条件
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
循环)比使用列表理解更好。
我想将此 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
循环)比使用列表理解更好。