Skip to main content
 首页 » 编程设计

python之将 Python 列表元素映射到多个元素,避免嵌套列表

2025年05月04日14www_RR

这样我就可以通过映射另一个列表中的每个元素来构建一个新列表:

# turn [0,5,10,15] into [1,6,11,16] 
[ x+1 for x in range(0,20,5) ] 

但我希望每个元素在我的新列表中产生两个元素。我怎样才能做到这一点?这是我的尝试:

# turn [0,5,10,16] into [0,1,-5,6,-10,11,-15,16] 
# does not work! gives [[0,1],[-5,6],[-10,11],[-15,16]] 
[ [-x,x+1] for x in range(0,20,5) ] 
 
# turn [0,5,10,16] into [0,1,-5,6,-10,11,-15,16] 
# does not work! gives [(0,1),(-5,6),(-10,11),(-15,16)] 
[ (-x,x+1) for x in range(0,20,5) ] 

当然,我可以创建列表的列表,然后以某种方式将其展平,但有没有更简洁的方法?

请您参考如下方法:

你需要使用两个循环:

>>> [t for x in range(0,20,5) for t in [-x,x+1] ] 
[0, 1, -5, 6, -10, 11, -15, 16] 

或者,如果您要处理更大的数据集,您可以使用 itertools.chain()

>>> from itertools import chain 
>>>  
>>> list(chain.from_iterable([-x,x+1] for x in range(0,20,5))) 
[0, 1, -5, 6, -10, 11, -15, 16] 
>>>  

请注意,如果您只想遍历结果,则不必将结果转换为列表,因为 chain.from_iterable 返回一个迭代器,并且在内存使用方面进行了相当多的优化.