1

给定一个一般的数字列表,例如 [1, 2, 3, 4, 5, 6],我需要将此列表拆分为 [(1 + 2j), (3 + 4j), (5 + 6j) 的形式]。

我可以将列表拆分为两个列表 - [1, 3, 5] 和 [2, 4, 6] - 但是在尝试将它们组合成所需形式时遇到两个问题:i)我无法将第二个列表乘以 1j ,返回错误“不能将序列乘以'complex'类型的非整数”,并且ii)由于串联,列表无论如何都是[1,3,5,2,4,6]的形式。

鉴于我正在使用具有 2048 个元素的列表,任何人都可以建议任何快速解决此问题的方法,因为显然大小使得以所需格式单独输入数据是不切实际的。

4

1 回答 1

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)]
于 2012-11-12T16:10:05.470 回答