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

我正在从Matlab转向Python,所以我还不熟悉Python.我正在尝试为一些数据分析创建一个基本代码.它应读入指定目录中的所有.txt数据文件,并使用实际.txt文件的名称对其进行标记.我已经设法找到一种方法来使用字典来实现这一点,但如果有更好的方法,我会非常感激听到它.

一旦我有权访问数据,我就想创建一个包含该数据的操作版本的新列表.为此,我想创建一个新的n x m列表或数组,但是我找不到如何正确初始化这样的列表.我的最新努力导致以下错误:

list indices必须是整数,而不是元组

代码如下:

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

感谢您的任何反馈!

解决方法:

您正在使用扩展切片语法,只有numpy库支持,在标准Python列表类型(您的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序列类型(如str,list和tuple)仅支持简单索引:

E[0]
E[-2]

或普通切片:

E[:10]
E[1:2]
E[3:]
E[:-1]
上一篇:使用rpy2映射python元组和R列表?


下一篇:sqlite中的自增主键