python-3.x 如何不使用“for i”循环遍历列表[duplicate]

wtlkbnrh  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(113)

此问题在此处已有答案

How can I collect the results of a repeated calculation in a list, dictionary etc. (or make a copy of a list with each element modified)?(2个答案)
Explicitly declaring variable as unused in Python/PyCharm(5个答案)
Convert tuple to list and back(11个答案)
四年前关闭了。
当函数被调用时,*args是一个元组,所以我必须先将每个参数附加到一个列表中,然后通过将它们的值Map为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”循环,并且更有效?

qojgxg4l

qojgxg4l1#

Python式的方法大概是这样的:

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)中的生成器,或者Mapsum(map(float, args)),效果相同.

ewm0tg9j

ewm0tg9j2#

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之前对其进行验证。

相关问题