Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “中的任意序列”;拉链式;序列(实际映射的序列)_Python_List_Tuples_Map Function - Fatal编程技术网

Python “中的任意序列”;拉链式;序列(实际映射的序列)

Python “中的任意序列”;拉链式;序列(实际映射的序列),python,list,tuples,map-function,Python,List,Tuples,Map Function,这很有效: In [53]: map(None, a,c,d) Out[53]: [(1, 4, 'a'), (2, 5, 'b'), (3, 6, None), (None, 7, None)] ( ) 但如果我想要列表而不是元组,它会失败: In [54]: map(list, a,c,d) --------------------------------------------------------------------------- TypeError

这很有效:

In [53]: map(None, a,c,d)
Out[53]: [(1, 4, 'a'), (2, 5, 'b'), (3, 6, None), (None, 7, None)]
(

)

但如果我想要列表而不是元组,它会失败:

In [54]: map(list, a,c,d)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-54-9447da50383e> in <module>()
----> 1 map(list, a,c,d)

TypeError: list() takes at most 1 argument (3 given)
但是有没有smth可以直接在map()中使用

似乎大多数序列都有这个问题:

In [59]: tuple(3,3,5)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-59-f396cf5fe9be> in <module>()
----> 1 tuple(3,3,5)

TypeError: tuple() takes at most 1 argument (3 given)   
[59]中的
:元组(3,3,5)
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1元组(3,3,5)
TypeError:tuple()最多接受1个参数(给定3个)
我希望能够将一个特殊的序列传递给map(),并获得这样的序列列表(如列表、集合等),这些序列组合了“压缩”(映射)序列中的后续元素。

使用

map(list, map(None, a, c, d))  
因为
map(None,…)
相当于
itertools.izip\u longest(…)

这更好(至少在2.x中):

这里有一些例子

In [100]: zip(a,c,d)
Out[100]: [(1, 4, 'a'), (2, 5, 'b')]

In [101]: map(None, a,c,d)
Out[101]:[(1, 4, 'a'), (2, 5, 'b'), (3, 6, None), (None, 7, None)]

In [102]: map(list, map(None, a,c,d))
Out[102]:[[1, 4, 'a'], [2, 5, 'b'], [3, 6, None], [None, 7, None]]

In [103]: import itertools
In [104]: map(list, itertools.izip_longest(a,c,d))
Out[104]:[[1, 4, 'a'], [2, 5, 'b'], [3, 6, None], [None, 7, None]]
此外,您似乎不知道如何使用
元组
&
列表

这两个类似函数的对象获取一个iterable,并将它们分别转换为
元组
&
列表

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> tuple(range(10))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> list(tuple(range(10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
您通常使用压缩列表;您使用
map()
是该函数工作方式的一个令人愉快的副作用

zip()
仍然会生成元组,但您可以将其与
map()
结合使用:

或者您可以使用列表理解(在筛选、嵌套循环和转换数据时,速度较慢但更灵活):


我没有明确地写我需要从最长的序列中生成所有值,并用smth-else(像None一样)替换较短序列中缺少的值,因此是zip()没有用,因为它会将结果序列截断为最短序列的长度。我也喜欢这个解决方案,因为izip_longest有一个fillvalue=kw参数
map(list, itertools.izip_longest(a, c, d))
In [100]: zip(a,c,d)
Out[100]: [(1, 4, 'a'), (2, 5, 'b')]

In [101]: map(None, a,c,d)
Out[101]:[(1, 4, 'a'), (2, 5, 'b'), (3, 6, None), (None, 7, None)]

In [102]: map(list, map(None, a,c,d))
Out[102]:[[1, 4, 'a'], [2, 5, 'b'], [3, 6, None], [None, 7, None]]

In [103]: import itertools
In [104]: map(list, itertools.izip_longest(a,c,d))
Out[104]:[[1, 4, 'a'], [2, 5, 'b'], [3, 6, None], [None, 7, None]]
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> tuple(range(10))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> list(tuple(range(10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
map(list, zip(a, c, d))
[list(t) for t in zip(a, c, d)]
>>> from itertools import izip_longest
>>> [list(x) for x in itertools.izip_longest([1,2,3],[4,5,6,7],['a','b'])]
[[1, 4, 'a'], [2, 5, 'b'], [3, 6, None], [None, 7, None]]