jeb*_*bob 1 python iterable-unpacking
我想遍历一个元组的迭代并将每个值存储在一个新变量中。我可以使用zip来做到这一点:
x, y = zip(*enumerate(range(0,30,5)))
但这在iterable为空的情况下不起作用
x, y = zip(*enumerate(range(0,-1,5)))
Traceback (most recent call last):
File "C:\Python36\lib\site-packages\IPython\core\interactiveshell.py", line 3267, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-35-76960294a673>", line 1, in <module>
x, y = zip(*enumerate(range(0,-1,5)))
ValueError: not enough values to unpack (expected 2, got 0)
Run Code Online (Sandbox Code Playgroud)
因为zip返回一个空的Iterable,而不是包含两个空列表的Iterable
如何处理iterable为空的情况?
尴尬的特殊外壳:
x, y = [*zip(*your_iterable)] or [(), ()]
Run Code Online (Sandbox Code Playgroud)
或只是不使用zip(*...)。您zip(*enumerate(...))可以通过以下方式构建索引来代替range:
y = tuple(range(0,-1,5))
x = tuple(range(len(y)))
Run Code Online (Sandbox Code Playgroud)
我在tuple这里打电话来复制的行为zip,但是根据您在做什么,可能没有必要。
| 归档时间: |
|
| 查看次数: |
38 次 |
| 最近记录: |