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的主要内容,如果未能解决你的问题,请参考以下文章