我有一个名为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
感谢任何帮助。
答案 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")]