1

[1, 2, 3, 4, 5, 6] などの数値の一般的なリストが与えられた場合、このリストを [(1 + 2j), (3 + 4j), (5 + 6j) の形式に分割する必要があります。 ]。

リストを [1, 3, 5] と [2, 4, 6] の 2 つのリストに分割できますが、それらを結合して目的の形式にしようとすると、2 つの問題が発生します。i) 2 番目のリストに 1j を掛けることができない、「シーケンスをタイプ 'complex' の非 int で乗算できません」というエラーを返します。また、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 に答える