IndexError:列表索引超出范围;试图传递作为参数

时间:2014-06-03 15:27:01

标签: python

我是Python的新手,我正在尝试编写一个脚本,让我从我生成的几个文件中读取数据(它们有一组命名方案)。但是当我尝试运行它时,我一直得到上​​面的IndexError。

before = [29, 22, 21]
after = [6, 6, 1]
prop = ['n_force', 'n_force_sub', 'x_force', 'x_force_sub']

for pi in prop:
    for m in before:
        t, fn = np.genfromtxt("peg_4_60_shear_{0}.{1}.{2}".format(before[m],after[m],prop[pi]),unpack=True, skiprows=2)

编辑|问题已解决:我通过将beforeafter数组转换为字符串并将代码更改为以下内容来解决此问题:

before = ['29', '22', '21']
after = ['6', '6', '1']  
prop = ['n_force', 'n_force_sub', 'x_force', 'x_force_sub']        

for l in range(0,3):
      for m in range(0,2):
          t, fn = np.genfromtxt("peg_4_60_shear_{0}.{1}.{2}".format(before[m], after[m], prop[l]) ,unpack=True, skiprows=2) 

之后我有更多的代码来打印抓取的数据,但现在我正在努力将数据保存到文件或其他东西。谢谢大家:)

2 个答案:

答案 0 :(得分:0)

在处理2个不同的列表时,您需要zip()它们一起循环它。

for pi, m in zip(prop, before):
    t, fn = np.genfromtxt("peg_4_60_shear_{0}.{1}.{2}".format(before[m],after[m],prop[pi]),unpack=True, skiprows=2)

答案 1 :(得分:0)

m遍历before并按顺序获取值29, 22, 21

beforeafter没有30个元素,因此before[m](在[29]之前)将会中断。

如果您希望一次循环两个序列,最好使用zip配对值,例如;

for pi in prop:
  for b,a in zip(before, after):
    t, fn = np.genfromtxt("peg_4_60_shear_{0}.{1}.{2}".format(b, a, prop[pi]),unpack=True, skiprows=2)