【问题标题】:python list comprehensive if elsepython列表理解if else
【发布时间】:2023-03-14 11:19:02
【问题描述】:

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

如果它是一个 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 运行它时,仍然无法弄清楚。 你能告诉我我哪里做错了吗?

【问题讨论】:

    标签: python list list-comprehension


    【解决方案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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2017-11-14
    相关资源
    最近更新 更多