Python一个变量等于多个数 python多个变量输入

admin2024-06-04  16

我们需要比较来自多对 pandas 数据框的一列,并将共享值写入空列表。我们已经编写了一个函数,可以使用单个数据帧对来执行此操作,但似乎无法将其扩展。

以下是我们编写的函数:

def parser(dataframe1, dataframe2, emptylist):
    for i1 in dataframe1['POS']:
        for i2 in dataframe2['POS']:
            if i1 == i2:
                emptylist.append(i1)

其中,“POS”是两个 pandas 数据框中的列标题。

我们已经为函数的每个输入值编制了一个变量名称列表,例如:

dataframe1_names = ['name1', 'name2', etc...]
dataframe2_names = ['name1', 'name2', etc...]
emptylist_names = ['name1', 'name2', etc...]

其中,列表的每个元素都是一个包含变量名称的字符串(对于前两个,是 pandas 数据框,对于最后一个,是空列表)。

我们尝试使用以下代码迭代这些列表:

import itertools

for a, b, c in zip(range(len(dataframe1_names)), range(len(dataframe2_names)), range(len(emptylist_names))):
    parser(dataframe1_names[a], dataframe2_names[b], emptylist_names[c])

但这会返回 TypeError:字符串索引必须是整数。

我们认为此错误来自向函数传递包含变量名称的字符串,而不是变量名称本身。是否有另一种方法可以自动向函数传递多个变量?

2、解决方案

为了将多个变量传递给 Python 函数,可以使用以下方法:

  • 使用 可变长参数列表(*args),它允许函数接收任意数量的位置参数。
  • 使用 关键字参数(****kwargs),它允许函数接收任意数量的关键字参数。

我们也可以使用 zip() 函数将多个列表中的元素组合成元组,然后将这些元组作为参数传递给函数。

使用可变长参数列表

我们可以将函数 parser() 修改为使用可变长参数列表,如下所示:

def parser(*args):
    dataframe1, dataframe2, emptylist = args
    for i1 in dataframe1['POS']:
        for i2 in dataframe2['POS']:
            if i1 == i2:
                emptylist.append(i1)

现在,我们可以使用以下代码调用函数 parser(),并将多个变量作为参数传递给它:

parser(dataframe1, dataframe2, emptylist)

使用关键字参数

我们也可以将函数 parser() 修改为使用关键字参数,如下所示:

def parser(**kwargs):
    dataframe1 = kwargs['dataframe1']
    dataframe2 = kwargs['dataframe2']
    emptylist = kwargs['emptylist']
    for i1 in dataframe1['POS']:
        for i2 in dataframe2['POS']:
            if i1 == i2:
                emptylist.append(i1)

现在,我们可以使用以下代码调用函数 parser(),并将多个变量作为关键字参数传递给它:

parser(dataframe1=dataframe1, dataframe2=dataframe2, emptylist=emptylist)

使用 zip() 函数

我们也可以使用 zip() 函数将多个列表中的元素组合成元组,然后将这些元组作为参数传递给函数 parser(),如下所示:

for args in zip(dataframe1_names, dataframe2_names, emptylist_names):
    parser(*args)

这样,我们就通过多种方法将多个变量传递给 Python 函数。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!