python list comprehension if else

时间:2014-09-14 16:54:37

标签: python list list-comprehension

嗨我想使用list comprehension创建一个包含以下内容的整数列表:

如果是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 :(得分:0)

您可以使用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