Python 试图理解作者在这里表达的意思,用zip(*zip)解压拉链(

Python 试图理解作者在这里表达的意思,用zip(*zip)解压拉链(,python,Python,我正在阅读学习Python的书籍,很难理解作者在这里到底想表达什么 他说:因为调用中的参数解包语法接受iterables,所以也可以使用zip内置调用解压压缩元组,方法是为另一个zip调用生成先前的或嵌套的zip结果参数 >>> X = (1, 2) >>> Y = (3, 4) >>> list(zip(X, Y)) [(1, 3), (2, 4)] # Zip tuples; returns an iterable. >>&g

我正在阅读学习Python的书籍,很难理解作者在这里到底想表达什么

他说:因为调用中的参数解包语法接受iterables,所以也可以使用zip内置调用解压压缩元组,方法是为另一个zip调用生成先前的或嵌套的zip结果参数

>>> X = (1, 2)
>>> Y = (3, 4)
>>> list(zip(X, Y))
[(1, 3), (2, 4)] # Zip tuples; returns an iterable.
>>> A, B = zip(*zip(X, Y)) # Unzip a zip! 
>>> A
(1, 2)
>>> B
(3, 4)

我不明白zip的意义,然后是*zip?难道A,B=X,Y不会做同样的事情吗。有人能帮我解释一下这个概念吗?

这真的不是一件有用的事情。作者只是在演示概念。我想我对zip和iterables有点困惑。我在公关上看不到它们的重要性agmatic级别。了解这些主题有什么重要的吗?迭代是你经常要做的事情。你需要这些知识来理解生成器之类的概念,这些概念非常重要。
zip
不是关键知识,但它是一个有用的工具。你还可以用它来做一些巧妙的技巧.尝试
zip(*[iter(范围(15))]*3)
,然后尝试了解引擎盖下发生了什么。如果我理解您的示例,请告诉我。它似乎正在创建3到15的元组,但不包括15。从逆向工程的角度来看,这是有意义的,但我想我不理解为什么特定语法会这样工作。为什么将b相乘y三在最后创建组?他确实提到,在第18章中,我们将更深入地讨论*args。我认为这就是导致我对它感到困惑的原因。比如,这是有道理的,但我猜这条信息,或者说缺乏信息,使它比可能的更令人困惑。