【问题标题】:Simple Syntax Question (tuple conversion)简单语法问题(元组转换)
【发布时间】:2021-06-06 17:00:30
【问题描述】:

我目前正在研究为不同目的组合、组织和操作数据的不同方法。

就在今天,我发现了这种 zip() / iter() 技术,可以创建包含 TUPLES 的 LIST,同时还能够指定每个 TUPLE 中有多少元素。但是,我无法完全理解部分语法。

代码如下:

mylist = [1,2,3,4,5,6]

converted = [x for x in zip(*[iter(mylist)]*2)]

print(converted)

这是输出(这是我想要的):

[(1, 2), (3, 4), (5, 6)]

我试图掌握的是第一个星号。我知道这很可能与 '*2' 告诉 'iter' 或 'zip' 函数每个元组应该包含多少个元素有关,但是,我试图掌握它的放置需求。

非常感谢任何帮助。

另外,如果您知道另一种实现此目的的技术并愿意分享,我将非常感谢您向我学习。

再次提前感谢各位!

【问题讨论】:

    标签: python-3.x list tuples data-conversion


    【解决方案1】:

    基本上 iter(mylist) 为列表创建一个迭代器对象,然后将其放入列表 [iter(mylist)] 乘以 2 基本上创建一个包含对同一迭代器对象的两个引用的列表:[iter(mylist)]*2 -> @987654324 @

    第一个星号将列表作为参数解压缩到 zip() 函数中。 为了便于理解,因为我不太擅长解释事情,这段代码和你的一样:

    mylist = [1,2,3,4,5,6]
    
    iterators = [iter(mylist)] * 2
    converted = [x for x in zip(*iterators)]
    
    print(converted)
    

    所以它创建了一个迭代器,然后通过将它乘以 2 来创建一个包含对同一迭代器对象的两个引用的列表。 然后它解压缩列表以用作zip() 函数的参数

    我希望这至少能为你澄清一点,因为我不太擅长解释。

    【讨论】:

    • 我认为你在试图解释这样的事情时解释得尽可能好。我明白这并不容易。这对我有帮助!感谢您抽出宝贵时间回复此帖。
    • 所以本质上,正在发生的事情是这样的:“2”正在创建两个不同的可迭代对象......而“”正在使用 for 循环合并这些列表。对吗?
    • 这基本上就是元组解包,你也可以像元组一样解包列表。
    • 对于“2”,Python 正在做的事情如下:[iter(mylist)]*2。它将首先创建迭代器对象和列表,然后将列表乘以 2 创建一个具有相同迭代器但在列表中两次的新列表。
    • 知道了。我仍然喜欢理解正在发生的疯狂。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 2014-10-20
    相关资源
    最近更新 更多