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

Want to convert text file of complex numbers to a list of numbers in Python

我有一个名为 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

感谢任何帮助。

根据帮助信息,对于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)

试试这个:

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() 不知道如何处理的文本行。我们首先需要将每一行分解为一对数字 - 实数和虚数。为此,我们需要进行一些字符串操作(拆分和剥离)。最后,当我们将 real 和 imag 字符串传递给 complex() 函数时,我们将它们转换为浮点数。

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

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