def over(xs,ys):
我如何使用 xs 的第一个值、ys 的第一个值、xs 的第二个值、ys 的第二个值等创建一个新列表。
例子
([1,2,3], ["hi", "bye",True, False, 33]) ===> [1, "hi", 2, "bye", 3, True, False, 33]
在 Python 2.X 上:
>>> data = ([1,2,3], ["hi", "bye",True, False, 33])
>>> [x for t in map(None, *data) for x in t if x is not None]
[1, 'hi', 2, 'bye', 3, True, False, 33]
在 Python 3.x 上:
>>> from itertools import zip_longest
>>> data = ([1,2,3], ["hi", "bye",True, False, 33])
>>> [x for t in zip_longest(*data) for x in t if x is not None]
[1, 'hi', 2, 'bye', 3, True, False, 33]
您绝对应该毫不犹豫地使用 itertools / zip_longest。但是,如果您想好奇:
def oldMapNone(*ells):
'''replace for map(None, ....), invalid in 3.0 :-( '''
lgst=len(max(ells, key=len))
return list(zip(*[list(e) + [None] * (lgst - len(e)) for e in ells]))
data = ([1,2,3], ["hi", "bye",True, False, 33])
print([x for t in oldMapNone(*data) for x in t if x is not None])
# [1, 'hi', 2, 'bye', 3, True, False, 33]
适用于任一 Python 版本。但是,我不能推荐它优先于 itertools 版本。
>>> l1
[1, 2, 3]
>>> l2
['hi', 'bye', True, False, 33]
>>>
>>>
>>> while l1 or l2:
... if l1: l1.pop(0)
... if l2: l2.pop(0)
...
1
'hi'
2
'bye'
3
True
False
33