python列表理解if else

Posted

技术标签:

【中文标题】python列表理解if else【英文标题】:python list comprehensive if else 【发布时间】:2014-09-14 16:54:36 【问题描述】:

您好,我想使用列表推导来创建具有以下内容的整数列表:

如果它是一个 int 保持不变。 如果是str,则将其转换为int。 否则无。

例子:

func([(1, "48")])     # [(1, 48)]
func([(1, "0xf")]))   # [(1, 15)]
func([(1, "junk")]))  # None
func([([3], 4)]))     # None

到目前为止我的代码:

def func(iterable):
    if not (isinstance(x, int) and isinstance(x, str)):
        return None
return [x if isinstance(x, int) else int(x) if x.isdigit() for x in iterable]

当我在可迭代(无效语法)中对 x 运行它时,仍然无法弄清楚。 你能告诉我我哪里做错了吗?

【问题讨论】:

【参考方案1】:

您可以使用0 作为int 转换的基础,python 将尝试推断基础。这只接受字符串,所以我们可以使用str。当无法进行转换时,try-except 返回None

def func(iterable):
    try:
        return [int(str(x), 0) for x in iterable]
    except ValueError:
        return None

你的测试用例不是很正确,检查这些:

print func([1, "48"])    # [1, 48]
print func([1, "0xf"])   # [1, 15]
print func([1, "junk"])  # None
print func([[3], 4])     # None

【讨论】:

非常感谢 :) 但我还有一个问题,我们得到一个可迭代的元组,它是 [(1,"48")] 然后产生元素为 int 的元组(或者可以是转换为 int),否则没有。我们应该怎么做? 请准确捕捉异常,在本例中为 ValueError。

以上是关于python列表理解if else的主要内容,如果未能解决你的问题,请参考以下文章

带有if条件的生成器上的python列表理解

单行列表理解:if-else 变体

使用 if 和 break 创建 Python 列表推导式

列表理解Python中的嵌套控制流

通过python中的if条件附加列表

列表理解中的Python奇怪行为[重复]