0

我的代码正在为列表中的名称分配值。如果我的列表中没有要分配给其中一个名称的条目,我需要知道如何检索或设置默认值。到目前为止我的代码:

array =[[a],[b],[c],[d]]
no1 = array[0]
no2 =array[1]
no3 =array[2]
no4 =array[3]
# if array[4] exists:
    no5 = array[4]
else
    no5 = 0

我试过了-

try:
    array[4]
except ValueError:
    no5 = 0

但它作为数组 [4] 超出范围出现。

澄清一下,由于我的代码编写并不出色,基本上我得到了一个程序的三个不同输入,该程序应该读取这些输入,然后将输出写入文件。问题是所有输入都有不同的数组长度。所以我想要做的是以某种方式让程序检查是否存在(比如说)array[4] 的条目,如果该条目不存在,则创建条目 array[4] 并将其设为零。

4

5 回答 5

1

你去try和/except很好。如果你得到一个,IndexError那么你真的很接近,你只是在你的except. 这会奏效:

try:
    no5 = array[4]
except IndexError:
    no5 = 0
于 2012-11-16T16:45:22.497 回答
1

您应该捕获IndexError(由 引发的实际错误array[4])而不是ValueError.

于 2012-11-16T16:45:28.407 回答
0

而不是try你也可以检查数组的长度

def: elem_exists(arr, idx):
   return 0 <= ldx < len(arr)
于 2012-11-16T16:48:14.743 回答
0

您试图捕获错误的异常类型

try:
    no5 = array[4]
except IndexError:
    no5 = 0

一个漂亮的单线解决方案是使用itertools

import itertools
(no1,no2,no3,no4,no5),_ = zip(*itertools.izip_longest(array[:5],range(5),fillvalue=0))
于 2012-11-16T16:49:21.707 回答
0

为什么不像下面这样?

if len(array) > 4:
    no5 = array[4]
else:
    no5 = 0
于 2012-11-16T16:50:48.233 回答