【问题标题】:Get the type and index of an object in arguments in Python在 Python 中获取参数中对象的类型和索引
【发布时间】:2022-01-13 08:21:24
【问题描述】:

我的函数中有两种情况, 1:所有参数都是字符串,这个没有问题。 2:也会有int或float。我要做的是,检查 *vars 的类型,如果有 int 或 float 类型,找到该类型的索引。

def fonk(comp, *vars):
    varList = []
    varList.append(vars)
    varList = [x for xs in varList for x in xs]
    for i in range(len(varList)):
       if all(isinstance(x, str) for x in varList) == False:
          if type(varList[i]) == int or float:

例如:

fonk(">","str1", 1, "str2", 2.5)

所以 int 和 float 类型将是 vars[1] 和 vars[3]。我怎样才能确定这一点?提前致谢。

【问题讨论】:

  • 你为什么将vars 嵌套在varList 的另一个列表中,然后用列表理解将其展平?你只是在做varList = vars.copy()

标签: python python-3.x python-2.7


【解决方案1】:
def fonk(comp, *vars):
    if not all(isinstance(x, str) for x in varList):
        return [i for i, val in enumerate(vars) if isinstance(val, (int, float))]

无需将vars 复制到varList,并且all() 测试不应在循环内。

if type(varList[i]) == int or float:

不是测试某事物是否等于多个值之一的正确方法。见Why does "a == x or y or z" always evaluate to True?

你可以给isinstance()一个类型的元组,它会测试它是否是其中任何一个的实例。

【讨论】:

  • *vars 正在形成为元组,我正在使用的模拟程序正在寻找数组,所以我尝试将元组转换为数组。感谢您提供我一直在寻找的答案,但我如何相应地使用索引。我的意思是: varList[x] 其中 x 对应于 type(int)。
  • 返回列表时,可以使用varList[i] for i in fonk(comp, *varList)
【解决方案2】:

要检查类型,您要分别检查每个并根据类型进行操作。

def fonk(comp, *vars):
    for var in vars:
        if isinstance(var, str):
            pass
        elif isinstance(var, (int, float)):
            pass

【讨论】:

  • 问题是我想使用那个特定的索引。例如 fonk("
  • 您必须处理变量并从中创建一个新列表。您不能替换函数中的变量。 *vars 是 python 为您即时创建的迭代器。您只能对其进行处理并从中列出。
猜你喜欢
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 2014-11-27
  • 2019-10-19
  • 1970-01-01
  • 2014-05-14
  • 2012-02-21
  • 1970-01-01
相关资源
最近更新 更多