Gab*_*elT 4 python complex-numbers python-3.x
我这样做是为了恢复字符串的第一部分,例如:"13 + i"的"13":
l1 = ['13+i', '1+4i', '3+2i', '11+4i', '5+i', '10+2i', '5+4i']
l2 = [i.split('+')[0] for i in l1]
l2 = list(map(int, l2))
它运作良好,然后我想要"13 + i"中的"1",但由于字符串中的"i"没有"1"因素,因此它更复杂.
我应该得到:
[1, 4, 2, 4, 1, 2, 4]
即,只有数组中复数的虚部.
有什么想法帮我解决这个问题吗?
Python有一种处理复杂数字的方法; 它实际上有一个类型(<class 'complex'>).因此,为了避免重新发明轮子,我强烈建议使用它.
要做到这一点,我们必须首先清理我们的输入(将值转换strings为complex).要做到这一点,我们必须首先遵守Python的惯例单元的惯例,'j'而不是使用它'i'.
l1 = ['13+i', '1+4i', '3+2i', '11+4i', '5+i', '10+2i', '5+4i']
l1 = [complex(x.replace('i', 'j')) for x in l1]
# if you are curious how they look like
print(l1)
# -> [(13+1j), (1+4j), ...]
随着现在处于正确的格式的值,我们可以充分利用.real和.imag属性的类型的变量complex,并使用列表compehensions建立了我们的结果列表.
real_parts = [value.real for value in l1]
print(real_parts) 
# -> [13.0, 1.0, 3.0, 11.0, 5.0, 10.0, 5.0]
imaginary_parts = [value.imag for value in l1]
print(imaginary_parts)
# -> [1.0, 4.0, 2.0, 4.0, 1.0, 2.0, 4.0]
请注意,默认情况下,它们都是实数(实际上是非整数).将它们铸造成int可以轻松实现[int(value.real) for value in l1].
使用现有功能可能最好的一点是,您不必担心可能没有的边缘情况,因此可能导致代码中断.例如4j(没有实部)或1-j(负虚部因此.split('+')[0]不起作用)等等.
| 归档时间: | 
 | 
| 查看次数: | 1394 次 | 
| 最近记录: |