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

时间:2018-11-06 13:58:21

标签: python python-3.x list indexing

当函数被调用时,* 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”循环进行开发,并且效率更高?

2 个答案:

答案 0 :(得分:5)

pythonic的方式将是这样的:

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))内的生成器进行抽象,在那里具有相同的效果。

答案 1 :(得分:0)

df已经为您完成工作时,您不必引入y

i

当然,您可以通过直接遍历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) 块将它们转换为floats