给出一般数字列表,比如[1,2,3,4,5,6],我需要将此列表拆分为[(1 + 2j),(3 + 4j),(5) + 6j)]。
我可以将列表分成两个列表 - [1,3,5]和[2,4,6] - 但在尝试将它们组合成所需形式时会遇到两个问题:i)我无法将第二个列表相乘按1j列出,返回错误“不能将序列乘以'int'类型'复杂'”,而ii)列表的格式为[1,3,5,2,4,6],无论如何由于串联。
鉴于我正在处理具有2048个元素的列表,任何人都可以建议任何快速解决此问题的方法,因为很明显,这个大小使得以所需格式单独输入数据是不切实际的。
答案 0 :(得分:6)
使用zip()
并切片:
In [72]: lis=[1, 2, 3, 4, 5, 6]
In [73]: [complex(a,b) for a,b in zip(lis[::2],lis[1::2])]
Out[73]: [(1+2j), (3+4j), (5+6j)]
或:
In [74]: [complex(lis[i],lis[i+1]) for i in range(0,len(lis),2)]
Out[74]: [(1+2j), (3+4j), (5+6j)]
或使用迭代器,一种内存有效的解决方案:
In [76]: it=iter(lis)
In [77]: [complex(next(it),next(it)) for _ in range(len(lis)/2)]
Out[77]: [(1+2j), (3+4j), (5+6j)]