想要将复数的文本文件转换为Python中的数字列表

时间:2015-05-12 04:51:19

标签: python string file complex-numbers

我有一个名为output.txt的复数文本文件,格式为:

[-3.74483279909056 + 2.54872970226369*I]
[-3.64042002652517 + 0.733996349939531*I]
[-3.50037473491252 + 2.83784532111642*I]
[-3.80592861109028 + 3.50296053533826*I]
[-4.90750592116062 + 1.24920836601026*I]
[-3.82560512449716 + 1.34414866823615*I]
etc...

我想从复杂数字中创建一个列表(在Python中作为字符串读入)。

这是我的代码:

data = [line.strip() for line in open("output.txt", 'r')]
for i in data:
    m = map(complex,i)

但是,我收到了错误:

ValueError: complex() arg is a malformed string

感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

从帮助信息中,complex内置函数:

>>> help(complex)
class complex(object)
 |  complex(real[, imag]) -> complex number
 |
 |  Create a complex number from a real part and an optional imaginary part.
 |  This is equivalent to (real + imag*1j) where imag defaults to 0.

因此,您需要正确格式化字符串,并将实部和虚部作为单独的参数传递。

示例:

num = "[-3.74483279909056 + 2.54872970226369*I]".translate(None, '[]*I').split(None, 1)
real, im = num
print real, im
>>> -3.74483279909056 + 2.54872970226369
im = im.replace(" ", "") # remove whitespace
c = complex(float(real), float(im))
print c
>>> (-3.74483279909+2.54872970226j)

答案 1 :(得分:0)

试试这个:

numbers = []
with open("output.txt", 'r') as data:
    for line in data.splitlines():
        parts = line.split('+')
        real, imag = tuple( parts[0].strip(' ['), parts[1].strip(' *I]') )
        numbers.append(complex(float(real), float(imag)))

原始方法的问题在于输入文件包含complex()不知道如何处理的文本行。我们首先需要将每一行分解为一对数字 - 真实和想象。要做到这一点,我们需要做一些字符串操作(拆分和剥离)。最后,当我们将它们传递给complex()函数时,我们将real和imag字符串转换为浮点数。

答案 2 :(得分:0)

这是创建复杂值列表的简明方法(基于dal102答案):

data = [complex(*map(float,line.translate(None, ' []*I').split('+'))) for line in open("output.txt")]