如何在不使用"for i"循环的情况下浏览列表



当函数被调用时,*args是一个元组,所以我必须首先将每个参数附加到列表中。然后我通过将它们的值映射到float并使用sum((函数来求和。

这段代码没有错,但我收到了一条警告,上面写着"未使用的变量I"。

def function(*args):
x = []
y = 0
for i in range(len(args)):
x.append(args[y])
y += 1
x = list(map(float, x))
return sum(x)

有没有其他方法可以做到这一点,而不使用"for i"循环,并且更高效?

蟒蛇的方式是这样的:

def function(*args):
return sum(float(x) for x in args)

现在,为了在代码中解释这一切。您可以避免使用变量y,因为它的作用与i:完全相同

def function(*args):
x = []
for i in range(len(args)):
x.append(args[i])
x = list(map(float, x))
return sum(x)

然后,您可以避免附加,因为您可以使用map而不是args:

def function(*args):
x = list(map(float, args))
return sum(x)

您也可以只使用map(float, args),无需为此目的创建中间列表:

def function(*args):
x = map(float, args)
return sum(x)

因此,它可以抽象为sumsum(float(x) for x in args)内部的生成器,也可以与映射sum(map(float, args))一起,在那里产生相同的效果。

i已经在为您做工作时,您不必介绍y

def function(*args):
x = []
# y = 0 <-- This is not necessary
for i in range(len(args)):
x.append(args[i])   # <-- change to [i]
# y += 1
# i increments by 1 each loop.
x = list(map(float, x))
return sum(x)

当然,您可以通过直接循环args而不是它的range来进一步减少这个函数:

def function(*args):
x = []
for arg in args:
# directly loops through the elements within your args
x.append(arg)
x = list(map(float, x))
return sum(x)

您甚至可能希望在追加时合并float操作,以避免之后出现map

def function(*args):
x = []
for arg in args:
x.append(float(arg))
return sum(x)

更重要的是,你可以利用列表理解使其更短:

def function(*args):
x = [float(arg) for arg in args]
# does the same thing as above
return sum(x)

或者,将所有内容合并为一行:

def function(*args):
return sum(float(arg) for arg in args)

当然,根据需求的复杂性,您可能需要在通过try... except块将每个元素强制转换为floats之前验证它们。

相关内容

最新更新