Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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 for循环循环通过未指定范围内的值_Python_Python 2.7 - Fatal编程技术网

python for循环循环通过未指定范围内的值

python for循环循环通过未指定范围内的值,python,python-2.7,Python,Python 2.7,我有一个python代码,它包含一个listdict,其中每个元素都是一个任意大小的列表。我将对以下元素进行循环: for i in range(len(dict)): for j in range(1,len(dict[i])): str = dict[i][j] 在这一点上,我得到一个错误,说indexer:list index超出范围。我正在使用range(1,len(dict)),因为我想跳过dict中每个列表的第一个元素。在生成错误时,i=5,len(dict

我有一个python代码,它包含一个list
dict
,其中每个元素都是一个任意大小的列表。我将对以下元素进行循环:

for i in range(len(dict)):
    for j in range(1,len(dict[i])):
        str = dict[i][j]
在这一点上,我得到一个错误,说
indexer:list index超出范围
。我正在使用
range(1,len(dict))
,因为我想跳过
dict
中每个列表的第一个元素。在生成错误时,
i=5
len(dict[5])=2
,因此
j
应该只在
1
上循环,但当我检查
j
值时,我得到
2
。这怎么可能

更奇怪的是,当我在python控制台中键入上面的代码时,我没有收到这样的错误,而且一切正常

编辑:完整代码是:(注意从
dict
关键字的更改)

实际的
conds
keywords
列表要长得多,并且是从文件中读取的,但是我只是从python控制台复制并粘贴了两个元素

编辑2:在内部循环中打印出
i
j
len(dict[i])
dict[i]
。输出太长,无法放在这里,但这里有一个压缩版本:

0 1 3 ["'potassium acetate'", " 'k(oac)'", " 'potassium acetate'"]
3 1 3 ["'ammonium nitrate'", " '(nh4)2(no)3'", " 'ammonium nitrate'"]
3 1 3 ["'ammonium nitrate'", " '(nh4)2(no)3'", " 'ammonium nitrate'"]
3 1 3 ["'ammonium nitrate'", " '(nh4)2(no)3'", " 'ammonium nitrate'"]
4 1 5 ["'sodium acetate'", " 'sodium acetate'", " 'na(ac)'", " 'na acetate'", " 'na_acetate'"]
4 1 5 ["'sodium acetate'", " 'sodium acetate'", " 'na(ac)'", " 'na acetate'", " 'na_acetate'"]
5 1 2 ["'rbcl+mgcl2'", " 'rbcl+mgcl2 (0.025m each)'"]
4 1 5 ["'sodium acetate'", " 'sodium acetate'", " 'na(ac)'", " 'na acetate'", " 'na_acetate'"]
4 1 5 ["'sodium acetate'", " 'sodium acetate'", " 'na(ac)'", " 'na acetate'", " 'na_acetate'"]
3 1 3 ["'ammonium nitrate'", " '(nh4)2(no)3'", " 'ammonium nitrate'"]
3 1 3 ["'ammonium nitrate'", " '(nh4)2(no)3'", " 'ammonium nitrate'"]
4 1 5 ["'sodium acetate'", " 'sodium acetate'", " 'na(ac)'", " 'na acetate'", " 'na_acetate'"]
[2]
sodium acetate
4 1 5 ["'sodium acetate'", " 'sodium acetate'", " 'na(ac)'", " 'na acetate'", " 'na_acetate'"]
4 1 5 ["'sodium acetate'", " 'sodium acetate'", " 'na(ac)'", " 'na     acetate'", " 'na_acetate'"]
5 1 2 ["'rbcl+mgcl2'", " 'rbcl+mgcl2 (0.025m each)'"]

...

5 2 2 ["'rbcl+mgcl2'", " 'rbcl+mgcl2 (0.025m each)'"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "coarseCondEdit.py", line 38, in <module>
    str = keywords[i][j].strip().strip("'").strip()
IndexError: list index out of range
013[“‘醋酸钾’”、“‘k(oac)’”、“‘醋酸钾’”]
3 1 3[“‘硝酸铵’”、“(nh4)2(no)3’”、“‘硝酸铵’”]
3 1 3[“‘硝酸铵’”、“(nh4)2(no)3’”、“‘硝酸铵’”]
3 1 3[“‘硝酸铵’”、“(nh4)2(no)3’”、“‘硝酸铵’”]
4 1 5[“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”]
4 1 5[“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”]
5 1 2[“'rbcl+mgcl2'”,“rbcl+mgcl2(各0.025 m)”]
4 1 5[“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”]
4 1 5[“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”]
3 1 3[“‘硝酸铵’”、“(nh4)2(no)3’”、“‘硝酸铵’”]
3 1 3[“‘硝酸铵’”、“(nh4)2(no)3’”、“‘硝酸铵’”]
4 1 5[“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”]
[2]
醋酸钠
4 1 5[“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”]
4 1 5[“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”、“‘醋酸钠’”]
5 1 2[“'rbcl+mgcl2'”,“rbcl+mgcl2(各0.025 m)”]
...
5 2[“'rbcl+mgcl2'”,“rbcl+mgcl2(各0.025 m)”]
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“coarseCondendit.py”,第38行,在
str=关键字[i][j].strip().strip(“”).strip()
索引器:列表索引超出范围
线路

ind = [i for i, x in enumerate(match) if x]
更改用于外部循环的
i

顺便说一句,如果使用普通Python循环而不是索引循环,就不会发生这种情况:

for words in keywords:
    for word in words[1:]:
        for cond in conds:
            word = word.strip().strip("'").strip()
            match = [(word == l) for l in cond]
            ind = [i for i, x in enumerate(match) if x]
            if len(ind) !=0:
                print ind
                print word
这看起来不是更美好、更有意义吗


变量名可以进一步改进,但我将留给您,因为我不知道您的东西的正确名称。

列出名为
dict
。为什么?…为什么
dict
是一个列表?这令人困惑。也许可以显示你的
dict
内容。@AlexeyGorozhanov不,dict不是关键字。列出是否可以找到关键字这是一个有趣的问题,但我认为我无法在没有关键字的情况下进一步研究。同时,
dict
不是一个不能用作变量名的保留字,
str
,但使用它们仍然是一个坏主意,在这背后隐藏了类型的名称。如果您以后想要编写
s=str(i)
d=dict(*pairs)
,您将得到一个令人困惑的错误,因为您试图调用字符串对象或列表对象,而不是
str
dict
构造函数。当然,你让每个读你代码的人都感到困惑,让他们不得不三思而后行,当你想让别人为你发现问题时,这是个坏主意。我不敢相信我忽略了这一点。谢谢@硝酸钠也注意我刚才添加到答案中的代码和文本。
for words in keywords:
    for word in words[1:]:
        for cond in conds:
            word = word.strip().strip("'").strip()
            match = [(word == l) for l in cond]
            ind = [i for i, x in enumerate(match) if x]
            if len(ind) !=0:
                print ind
                print word