是否有一个内置函数,zip()但它会填充结果,以便结果列表的长度是最长输入的长度而不是最短的输入?
>>> a=['a1']
>>> b=['b1','b2','b3']
>>> c=['c1','c2']
>>> zip(a,b,c)
[('a1', 'b1', 'c1')]
>>> What command goes here?
[('a1', 'b1', 'c1'), (None, 'b2', 'c2'), (None, 'b3', None)]
Run Code Online (Sandbox Code Playgroud) 我有兴趣了解Python 3.x的新语言设计.
我喜欢在Python 2.7中使用的功能map:
Python 2.7.12
In[2]: map(lambda x: x+1, [1,2,3])
Out[2]: [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
但是,在Python 3.x中,事情发生了变化:
Python 3.5.1
In[2]: map(lambda x: x+1, [1,2,3])
Out[2]: <map at 0x4218390>
Run Code Online (Sandbox Code Playgroud)
我理解如何,但我找不到为什么的参考.为什么语言设计师会做出这样的选择,在我看来,这会引入很多痛苦.这是为了让开发人员坚持列表理解吗?
IMO,list自然可以被认为是Functors ; 而且我一直被认为以这种方式思考:
fmap :: (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud) 我在Python2.7中执行以下操作:
>>> a = [1,2,3,4,5]
>>> b = [2,1,3,4]
>>> c = [3,4]
>>> map(None, a, b, c)
[(1, 2, 3), (2, 1, 4), (3, 3, None), (4, 4, None), (5, None, None)]
Run Code Online (Sandbox Code Playgroud)
我试图在Python3中做类似的事情
>>> a = [1,2,3,4,5]
>>> b = [2,1,3,4]
>>> c = [3,4]
>>> map(None, a, b, c)
<map object at 0xb72289ec>
>>> for i,j,k in map(None, a, b, c):
... print (i,j,k)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'NoneType' …Run Code Online (Sandbox Code Playgroud)