【问题标题】:How can I write a Python function that will only accept a list with int or float type inside?如何编写一个 Python 函数,它只接受一个 int 或 float 类型的列表?
【发布时间】:2021-02-09 20:59:49
【问题描述】:

我需要编写一个函数,该函数将采用 int 或 float 类型的列表。如果有嵌套列表,函数必须返回“No”,如果只有 float 或 int 类型,函数必须返回“Yes”。 这是我的代码

def take_list(lst):
    for i in lst:
        if isinstance(i, list) is True:
            return "No"
        elif isinstance(i, int) or isinstance(i, float):
            return "Yes"


print(take_list([1, 2, [3, 2]]))
print(take_list([1, 2, 3, 2]))

但这里的答案总是“是”。 我尝试了“type”而不是“isinstance”,所以它不起作用

【问题讨论】:

  • print(i) 放在for i in lst: 下。你得到了多少打印输出?
  • 是的。如果你没有得到更多的打印输出,那是什么意思? (想想你在哪里returning)。
  • 在循环的第一次迭代中,您总是returning。代码在该循环中可以采用的每条路径都将以return "No"return "Yes" 结尾,并且一旦您return,您就会退出该函数。在检查整个列表之前返回 "Yes" 有意义吗?
  • @Ruslan 你知道你的列表中有更多的元素,但有些东西导致它在第一个元素之后结束。函数的哪一部分可以结束循环?
  • 我不会这么说的。 for i in lst: 很好。我会设置它,以便您在找到错误元素后立即在循环中返回“否”,然后在循环之后返回“是”。如果你通过整个循环而不返回,那么你知道所有元素都是好的,因为如果有一个坏元素你会更早返回。

标签: python-3.x list function types integer


【解决方案1】:

使用type怎么样?

def take_list(lst):
    # if all(isinstance(item, (int, float)) for item in lst): # another way
    if all(type(item).__name__ in ['int', 'float'] for item in lst):
        return "Yes"
    else:
        return "No"


print(take_list([1, 2, [3, 2]]))     # No
print(take_list([1, 2, 3, 2, 1.2]))  # Yes

typeintfloat 类中的函数,使用___name___ 获取类名。

【讨论】:

  • @Carcigenicate,我使用isinstance 添加了另一种方式。我没有任何理由使用type。但是“红鲱鱼”是什么意思?
  • 我的意思是建议使用type,这是您回答的重点,实际上并不能解决他们的问题。如果他们将原始代码更改为使用type 而不是isinstance,他们将遇到与现在相同的问题。实际的解决方案是使用您从未提及的all
  • @Carcigenicate ,我建议使用type 而不是使用许多or:if isinstance() or isinstance() etc.。然后我添加了另一种方式来使用isinstance 与多种类类型。
猜你喜欢
  • 1970-01-01
  • 2017-02-12
  • 2011-02-24
  • 2021-03-19
  • 2016-07-07
  • 1970-01-01
  • 2016-01-19
  • 2012-09-08
  • 1970-01-01
相关资源
最近更新 更多