Python 使用*

Python 使用*,python,Python,为什么zip函数会出现以下结果(示例3): l=list(zip(['1','2',['a','b'])) 印刷品(l) #[('1','a'),('2','b')]-好的,zip工作正常 l=列表(映射(lambda t:t[0]+t[1],zip(['1','2',['a','b'])) 印刷品(l) #['1a','2b']-很好,我已经预期了参数作为元组传递的结果 l=列表(映射(lambda x,y:x+y,*zip(['1','2'],['a','b'])) 印刷品(l) #['12

为什么zip函数会出现以下结果(示例3):

l=list(zip(['1','2',['a','b']))
印刷品(l)
#[('1','a'),('2','b')]-好的,zip工作正常
l=列表(映射(lambda t:t[0]+t[1],zip(['1','2',['a','b']))
印刷品(l)
#['1a','2b']-很好,我已经预期了参数作为元组传递的结果
l=列表(映射(lambda x,y:x+y,*zip(['1','2'],['a','b']))
印刷品(l)
#['12','ab']-为什么?!我刚刚加了一句,它把一切都弄坏了?
此外,如果我键入:

l=list(map(lambda x,y:x+y,*zip(['1','2','3'],['a','b','c']))
印刷品(l)
我得到以下错误:

回溯(最近一次呼叫最后一次):
文件“test.py”,第9行,在
l=列表(映射(λx,y:x+y,*zip(['1','2','3'],['a','b','c']))
TypeError:()接受2个位置参数,但给出了3个
输出:

['12', 'ab']
这里
*zip(['1','2'],['a','b'])
返回两个元组
('1','a')('2','b')
(请注意,两个元组之间没有逗号,这意味着由于
*
操作,它们都被解包)

lambda函数连接每个元组的第一个元素,因为当您将多个iterable项传递给
map
函数时,它只是同时迭代两个iterable! 在每次迭代中,它从每个元组中提取一个元素并连接

与第一个类似,表达式返回
*zip(['1','2','3'],['a','b','c'])
三个元组
('1','a')('2','b')('3','c')
,因此,在每个循环
映射中只需迭代所有三个元组,从而得到三个元组
争论

输出:

['12', 'ab']
这里
*zip(['1','2'],['a','b'])
返回两个元组
('1','a')('2','b')
(请注意,两个元组之间没有逗号,这意味着由于
*
操作,它们都被解包)

lambda函数连接每个元组的第一个元素,因为当您将多个iterable项传递给
map
函数时,它只是同时迭代两个iterable! 在每次迭代中,它从每个元组中提取一个元素并连接

与第一个类似,表达式返回
*zip(['1','2','3'],['a','b','c'])
三个元组
('1','a')('2','b')('3','c')
,因此,在每个循环
映射中只需迭代所有三个元组,从而得到三个元组

参数。

从以下迭代器开始:

map(lambda x, y: x + y, *zip(['1', '2'], ['a', 'b']))
用于“转置”列表的位置:

zip(['1', '2'], ['a', 'b']) -> [('1', 'a'), ('2', 'b')]
这意味着
map
有效地接收到以下信息:

map(lambda x, y: x + y, *[('1', 'a'), ('2', 'b')])
这是为了:

一个具有多个iterable的函数从每个iterable中提取一个元素并将其传递到函数中,因此结果是:

[(lambda x, y: x + y)('1', '2'), (lambda x, y: x + y)('a', 'b')] == ['12', 'ab']

我不知道你的困惑是从哪里来的,但这应该会有所帮助。请查看链接的文档以了解更多详细信息。

您可以从这个迭代器开始:

map(lambda x, y: x + y, *zip(['1', '2'], ['a', 'b']))
用于“转置”列表的位置:

zip(['1', '2'], ['a', 'b']) -> [('1', 'a'), ('2', 'b')]
这意味着
map
有效地接收到以下信息:

map(lambda x, y: x + y, *[('1', 'a'), ('2', 'b')])
这是为了:

一个具有多个iterable的函数从每个iterable中提取一个元素并将其传递到函数中,因此结果是:

[(lambda x, y: x + y)('1', '2'), (lambda x, y: x + y)('a', 'b')] == ['12', 'ab']

我不知道你的困惑是从哪里来的,但这应该会有所帮助。请查看链接的文档以了解更多详细信息。

如错误所示,*zip输出三个元素。另一方面,lambda函数接受2,x和yBut list(zip(['1','2','3'],['a','b','c'])给我:[('1','a'),('2','b'),('3','c')],每一步两个项目,而不是三个项目。
*
意味着解压列表,解压结果列表时,会给你三个项目。正如错误所说,*zip输出三个元素。另一方面,lambda函数接受2,x和yBut list(zip(['1','2','3'],['a','b','c'])给我:[('1','a'),('2','b'),('3','c')],每一步两个项目,而不是三个项目。
*
意味着解压列表,当你解压结果列表时,会给你三个项目。哦,我明白-我在这个案子中完全滥用了*的行为。非常感谢。哦,我明白-我在这个案子中完全滥用了*的行为。非常感谢。