python - 压缩一个空的可迭代对象

标签 python iterable-unpacking

我想遍历一个可迭代的元组并将每个值存储在一个新变量中。我可以用 zip 做到这一点: x, y = zip(*enumerate(range(0,30,5)))

但如果可迭代对象为空,这将不起作用

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)

因为 zip 返回一个空的可迭代对象而不是包含两个空列表的可迭代对象

如何处理可迭代对象为空的情况?

最佳答案

笨拙的特殊外壳:

x, y = [*zip(*your_iterable)] or [(), ()]

或者只是不使用 zip(*...)。您的 zip(*enumerate(...)) 可以通过使用 range 构造索引来替换:

y = tuple(range(0,-1,5))
x = tuple(range(len(y)))

我在这里调用 tuple 来复制 zip 的行为,但根据您正在做的事情,这可能不是必需的。

关于python - 压缩一个空的可迭代对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58410741/

相关文章:

python - 将 2d numpy 数组拆分为两个 1d 数组的最简单方法?

python - 如何使用 Python 实现并行 gzip 压缩?

Python:解包内部嵌套元组/列表,同时仍获取其索引号

python - 将字典传递给具有 base_estimator 特征的 sklearn 分类器

python - Celery Python 日志记录配置仅从指定模块记录 DEBUG

python - Numpy 方法确定数组中导致高方差的值

python - 用值填充列表

python - 在 Python 赋值运算符中使用逗号和下划线的含义?

python - 映射每个元素的功能?

python - 在 Python 中解包字典时,单(非双)星号 * 是什么意思?