嗨我想使用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时,仍然无法弄明白。 你能告诉我我做错了吗?
答案 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