我是 Python 和编程新手。谁能详细解释一下下面的代码?
def myzip(*seqs):
seqs = [list(S) for S in seqs]
res = []
while all(seqs):
res.append(tuple(S.pop(0) for S in seqs))
return res
>>> myzip([1, 2, 3], ['a', 'b', 'c'])
[(1, 'a'), (2, 'b'), (3, 'c')]
特别是,我不明白 S
是列表中的元素(例如 1
、2
...)还是列表 ([1, 2, 3]
)。
我想我需要对每一行进行详细解释。
最佳答案
在列表理解中,S
分配传递给函数的每个参数; seqs
是传入的参数列表,并且您传入了两个列表。所以S
首先绑定(bind)到[1, 2, 3]
然后['a', 'b', 'c']
.
>>> seqs = [[1, 2, 3], ['a', 'b', 'c']]
>>> seqs[0]
[1, 2, 3]
第一行只是确保所有参数都显式地转换为列表,以便您稍后可以调用 list.pop(0)
在各个。这允许您传入字符串、元组、字典或任何其他可迭代对象作为此函数的参数:
>>> myzip('123', 'abc')
[('1', 'a'), ('2', 'b'), ('3', 'c')]
while all(seqs):
然后循环迭代,直到至少有一个参数为空。换句话说,当最短序列用完时循环终止:
>>> myzip('1', 'abc')
[('1', 'a')]
在循环中,每个输入参数的第一个元素将从列表中删除并添加到 res
作为一个元组。对于 2 个输入列表,这意味着第一个 (1, 'a')
添加到res
,然后是 (2, 'b')
然后(3, 'c')
.
关于Python:多个参数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21233132/