当前位置: 首页 > 面试题库 >

将变量转换为列表的pythonic方法

孙绍辉
2023-03-14
问题内容

我有一个函数,其输入参数可以是一个元素或元素列表。如果此参数是单个元素,则将其放在列表中,以便可以以一致的方式遍历输入。

目前我有这个:

def my_func(input):
    if not isinstance(input, list): input = [input]
    for e in input:
        ...

我正在使用现有的API,因此无法更改输入参数。使用isinstance()感觉很麻烦,所以有 适当的 方法吗?


问题答案:

我喜欢Andrei Vajna的建议hasattr(var,'__iter__')。请注意以下一些典型的Python类型的结果:

>>> hasattr("abc","__iter__")
False
>>> hasattr((0,),"__iter__")
True
>>> hasattr({},"__iter__")
True
>>> hasattr(set(),"__iter__")
True

这具有将字符串视为不可重复的额外优势-字符串是灰色区域,有时您希望将它们视为元素,而有时则将其视为字符序列。

请注意,在Python 3中,str类型 确实 具有__iter__属性,并且这不起作用:

>>> hasattr("abc", "__iter__")
True


 类似资料:
  • 问题内容: 我有一个整数列表,需要将其解析为一系列字符串。 例如: 等等。 我仍在学习处理列表的更多pythonic方法,这对我来说有点困难。我最近的想法是创建一个列表列表,以跟踪成对的数字: 然后,我可以遍历此结构,将每个子列表打印为范围或单个值。 我不喜欢在两次迭代中执行此操作,但是我似乎无法跟踪每次迭代中的每个数字。我的想法是做这样的事情: 这是我最近的尝试。它有效,但是我并不完全满意;我一

  • 我有一个lambda表达式,我想在其中创建一个对象列表,但我得到了错误 错误 我希望作为lambda表达式的返回类型。我怎样才能做到呢?

  • 问题内容: 还有一种将excel样式的列转换为数字(以1开头)的更pythonic的方法吗? 工作代码最多两个字母: 代码运行: 三个字母不起作用。 问题答案: 有一种方法可以使其变得更pythonic(可使用三个或更多字母,并使用较少的幻数): 并且作为使用reduce的单行代码(不检查输入并且可读性较低,所以我不推荐这样做):

  • 问题内容: 将a 转换为同时保持Queue顺序的最快方法是什么? 问题答案: 最快的方法是首先使用LinkedList,它可用作列表或队列。 否则您需要复印 注意:处理PriorityQueue时,请使用循环,轮询每个元素并添加到列表中。要列出的PriorityQueue不维护堆顺序。

  • 问题内容: 现在,我想创建一个新列表,其中包含中的所有值。这里的结果应该包含 问题答案: 使用以下方法尝试: