python - 在 Python 中定义函数时如何调用列表?

标签 python list function parameters arguments

我提前道歉。我是编码初学者。

我正在尝试使用 Python 编写一个函数,使用以下代码使用包含节点位置的 2 个列表来计算多边形的面积:

def Area(xvalues, yvalues):
    area = 0
    stepone = 0
    for x in xvalues:
        for y in yvalues:
            stepone = stepone + (xvalues(x)-xvalues(0))*(yvalues(y+1)-yvalues(y-1))
            area = abs(stepone)/2
    print area

xvalues = [2000, 2126, 2716, 2524, 2518, 2000]
yvalues = [1000, 1256, 1102, 408, 611, 1000]

Area(xvalues, yvalues)

但是,我收到一条错误消息,指出“TypeError:'list' object is not callable”。

我只希望方程在列表中循环并返回最终结果。我不确定我哪里出错了,但我认为这可能与我的函数参数有关。

如有任何帮助,我们将不胜感激。

最佳答案

您正在尝试在此处调用:xvalues(x)。如果 x 是一个索引,您希望 xvalues[x] 带有方括号而不是圆括号,但是 x 已经是元素本身了!但是,看起来您正在尝试访问与从迭代器中获取的元素不同的元素。您可以循环 x in range(len(xvalues)),如下所示:

def Area(xvalues, yvalues):
    area = 0
    stepone = 0
    for x in range(len(xvalues)):
        for y in range(len(yvalues)):
            stepone = stepone + (xvalues[x]-x[0])*(yvalues[y+1]-yvalues[y-1])
            area = abs(stepone)/2
    print area

但是它有几个问题。首先,yvalues[y-1]y0 时不会给您预期的结果。我不知道你希望从中得到什么。我能猜到的最好的是:

def Area(xvalues, yvalues):
    area = 0
    stepone = 0
    firstx = xvalues[0]
    for x in xvalues:
        for y1, y2 in zip(yvalues[1:], yvalues[:-1]):
            stepone = stepone + (x-firstx)*(y1-y2)
            area = abs(stepone)/2
    print area

zip 创建一个新列表,迭代这些列表,并将 y1 和 y2 分配给以下元素:[(1256, 1000), (1102, 1256), (408, 1102), (611, 408), (1000, 611)]

关于python - 在 Python 中定义函数时如何调用列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22209311/

相关文章:

javascript - 通过 POST 调用 HTML Javascript 函数

python - 如何在未聚焦/最小化的窗口中模拟鼠标/键盘事件?

python - PIL 和基于矢量的图形

r - 将列表变为 "list of lists"

python - 为 groupby 列编写自定义函数

javascript - 如何让一个函数在每次收到另一个函数的输出时执行? ( Node JS)

python - 获取系统 ping 的输出而不打印到控制台

python - axes.prop_cycle 的 Matplotlib 1.5 用法

java - 从数据库到应用范围

linux - 如何使用较少的代码将文件列表传递给 bash 脚本