Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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_List_Tuples - Fatal编程技术网

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

Python:列表索引必须是整数,而不是元组,python,list,tuples,Python,List,Tuples,我将从Matlab转到Python,所以我对Python还只是一个新手。我试图为一些数据分析创建一段基本代码。它应该读入指定目录中的所有.txt数据文件,并用实际的.txt文件名标记它们。我已经设法找到了一种使用字典来实现这一点的方法,但如果有更好的方法,我将非常感激听到它 一旦我有权访问这些数据,我就想创建一个包含这些数据的操纵版本的新列表。为此,我想创建一个新的nxm列表或数组,但是我找不到如何正确初始化这样的列表。我最近的努力导致以下错误: 列表索引必须是整数,而不是元组 代码如下: im

我将从Matlab转到Python,所以我对Python还只是一个新手。我试图为一些数据分析创建一段基本代码。它应该读入指定目录中的所有.txt数据文件,并用实际的.txt文件名标记它们。我已经设法找到了一种使用字典来实现这一点的方法,但如果有更好的方法,我将非常感激听到它

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

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

代码如下:

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

谢谢你的反馈

您在标准Python
列表
类型(您的
E
)变量上使用的是扩展切片语法,只有
numpy
库支持扩展切片语法

您必须使用
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]

一个数组只能指定一个索引。
使用这样的东西
E.append(dic['Test\u Efield\u 100GHz'][0])

这将E[0]存储为一个数组,其值可由E[0][i]访问,其中i是列名

注意:Python没有矩阵类型的数据结构,它只有数组。矩阵只是数组的数组。

以后,请在Python代码中包含错误的完整回溯,这样我们就不必猜测错误发生的位置。谢谢!这非常有帮助,也让我意识到,我可能应该更多地查阅numpy文档,了解我将要做的类型工作,而不是仅仅在Python下搜索。再次感谢!