Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中将字符串列表转换为复数?_Python - Fatal编程技术网

如何在python中将字符串列表转换为复数?

如何在python中将字符串列表转换为复数?,python,Python,我正在尝试编写用Python导入和导出复数列表的代码。到目前为止,我正在尝试使用csv模块。我已使用以下方法将数据导出到文件: spamWriter = csv.writer(open('data.csv', 'wb') spamWriter.writerow(complex_data) 其中复杂数据是由复杂(re,im)函数生成的列表编号。例: print complex_data [(37470-880j),(35093-791j),(33920-981j),(28579-789j),(4

我正在尝试编写用Python导入和导出复数列表的代码。到目前为止,我正在尝试使用csv模块。我已使用以下方法将数据导出到文件:

spamWriter = csv.writer(open('data.csv', 'wb')
spamWriter.writerow(complex_data)
其中复杂数据是由复杂(re,im)函数生成的列表编号。例:

print complex_data
[(37470-880j),(35093-791j),(33920-981j),(28579-789j),(48002-574j),(46607-2317j),(42353-1557j),(45166-2520j),(45594-232j),(41149+561j)]
为了稍后导入此文件,我尝试以下操作:

mycsv = csv.reader(open('data.csv', 'rb'))
out = list(mycsv)
print out
[['(37470-880j)','(35093-791j)','(33920-981j)','(28579-789j)','(48002-574j)','(46607-2317j)','(42353-1557j)','(45166-2520j)','(45594-232j)','(41149+561j)']]
(请注意,这是一个列表列表,我碰巧只使用了一行作为示例。)

我现在需要把它转换成复数而不是字符串。我认为应该有一种方法可以像中那样使用映射来实现这一点,但我不知道如何使其工作。任何帮助都将不胜感激

或者,如果有更简单的方法来导入/导出我不知道的复杂值数据,我很乐意尝试完全其他的方法

只需将字符串传递给:

就像它接受复数的字符串表示并解析它一样。您可以使用为列表执行此操作:

map(complex, row)
CSV文档说:

请注意,复数是用括号括起来的。这可能会导致读取CSV文件的其他程序出现一些问题(假设它们支持复数)

这应该将“out”中的元素从字符串类型转换为复数,这是最简单的解决方案,因为您的现有代码易于处理非复杂条目

 for i,row in enumerate(out):
      j,entry in enumerate(row):
          try:
               out[i][j] = complex(out[i][entry])
          except ValueError:
               # Print here if you want to know something bad happened
               pass
否则,在每行上使用map(complex,row)会占用更少的行

 for i,row in enumerate(out):
      out[i] = map(complex, row)

我认为上面的每种方法都有点复杂

最简单的方法就是这样

In [1]: complex_num = '-2+3j'

In [2]: complex(complex_num)
Out[2]: (-2+3j)

@Martijn Pieters以3分钟的优势击败了您,但是+1不是所有这在python 3中不起作用。地图(大部分)已被弃用:。。。这正是投票最多的人所说的,只是它没有必要把它写进Jupiter笔记本里。
 for i,row in enumerate(out):
      out[i] = map(complex, row)
>>> c = ['(37470-880j)','(35093-791j)','(33920-981j)']
>>> map(complex, c)
[(37470-880j), (35093-791j), (33920-981j)]
In [1]: complex_num = '-2+3j'

In [2]: complex(complex_num)
Out[2]: (-2+3j)