Python: 列表索引必须是整数而不是元组。

4
我正在从Matlab转向Python,所以对Python还很陌生。我试图创建一个基本的代码来进行一些数据分析。它应该读取指定目录中的所有.txt数据文件,并用实际.txt文件的名称进行标记。通过使用字典,我已经找到了一种方法使其正常工作,但如果有更好的方法,我将非常感激听到它。
一旦我可以访问数据,我想创建一个新列表,其中包含处理过的数据版本。为此,我想创建一个新的n x m列表或数组,但我找不到正确初始化这样一个列表的方法。我的最新尝试导致以下错误: 列表索引必须为整数,而不是元组。
以下是代码:
import sys
import os
import re
import string
from numpy import *

listing = os.listdir(path)
dic = {}    # define a dictionary to map the datafiles to while maintaining their filename

for filename in listing:
        match = re.findall(r'[\w.]+\.txt', filename)    # Use a regular expression findall function to identify all .txt files
        if match:
            dic[match.pop()[:-4]] = loadtxt(filename)   # Drop the .txt and assign the datafile its original name

E = []
E[:,0] = dic['Test_Efield_100GHz'][:,0]
E[:,1] = dic['Test_Efield_100GHz'][:,1]
E[:,2] = abs(dic['Test_Efield_100GHz'][:,4]+dic['Test_Efield_100GHz'][:,7]*1j)**2
E[:,3] = abs(dic['Test_Efield_100GHz'][:,5]+dic['Test_Efield_100GHz'][:,8]*1j)**2
E[:,4] = abs(dic['Test_Efield_100GHz'][:,6]+dic['Test_Efield_100GHz'][:,9]*1j)**2

感谢任何反馈!

1
将来请在Python代码中出现错误时包含完整的回溯,这样我们就不必猜测您的错误发生在哪里。 - Martijn Pieters
2个回答

3
您正在使用扩展切片语法,这只有numpy库支持,在标准的Pythonlist类型(即您的E)变量上。
您需要使用E.append()来添加新值到变量中:
E.append(dic['Test_Efield_100GHz'][:,0])

或者简单地将整个列表定义为一组表达式:

E = [
    dic['Test_Efield_100GHz'][:,0]
    dic['Test_Efield_100GHz'][:,1]
    abs(dic['Test_Efield_100GHz'][:,4]+dic['Test_Efield_100GHz'][:,7]*1j)**2
    abs(dic['Test_Efield_100GHz'][:,5]+dic['Test_Efield_100GHz'][:,8]*1j)**2
    abs(dic['Test_Efield_100GHz'][:,6]+dic['Test_Efield_100GHz'][:,9]*1j)**2
]

或者使用numpy数组代替。

标准的python序列类型,如strlisttuple只支持简单索引:

E[0]
E[-2]

或者普通切片:
E[:10]
E[1:2]
E[3:]
E[:-1]

谢谢!这非常有帮助,也让我意识到我可能应该更多地参考numpy文档来完成我的工作类型,而不仅仅是在Python下搜索。再次感谢! - user1827345

0

你只能为数组指定一个索引。
使用类似这样的语句
E.append(dic['Test_Efield_100GHz'][0])
这将把E [0]存储为一个数组,其值可以通过E [0] [i]访问,其中i是列名
注意:Python没有矩阵类型的数据结构,它只有数组。矩阵只是一个数组的数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接