【发布时间】:2014-09-19 08:32:06
【问题描述】:
我正在编写一个接收可迭代元组的函数,然后我必须生成所有元素都是整数的元组。其中条件:
对于元组中的每个元素:
- 如果是 int,则保持不变
- 如果是str,则将其转换为int(如果可能,请参见下面的示例)
-
否则,返回无
For example: list(func([(1, "48")])) = [(1, 48)] list(func([(1, "0xf")])) = [(1, 15)] list(func([(1, "junk")])) = None list(func([([3], 4)])) = None
到目前为止,这是我的代码,看起来很讨厌并且不起作用
def func(iterable):
for x in iterable:
for i in x:
if not ((isinstance(i, str) and i.isdigit()) or (isinstance(i, str) and isinstance(int(i, 16), int)) or isinstance(i, int)):
yield None
yield [i if isinstance(i, int) else int(i) if i.isdigit() else int(i, 16) for i in x for x in iterable]
你有更好的解决方案吗?我是 python 新手,非常感谢任何帮助:)
【问题讨论】:
-
Python 相信“如果它是一只鸭子,它就是一只鸭子”。你最好在每个元素上调用 int() 并捕获异常而不是使用 isinstance。
-
我不禁注意到这次尝试中明显没有
yield。你知道yield是什么吗? -
另外,你真的是指
return None,就像“忘记所有其他是好的元素,如果一个元素不好就不返回任何东西? " -
"
list(func([([3], 4)])) = None" -- 我很确定列表构造函数在任何情况下都不会返回 None。 -
我仍然不认为你明白
yield的意思。如果有任何错误值,这将产生一大堆None值,然后引发异常;否则,它将只产生一个值。你想要的输出看起来不像那样。