Python - 如果列表元素不存在则排除变量

时间:2017-06-06 14:13:42

标签: python list indexing

这里的Python新手 - 无法在网上找到类似的东西。

我正在尝试分析包含许多具有不同列长度的行的大型数据集。我的数据的一个例子可能是:" LY R15 515 750 601 999"其中每行的元素数量不同。我希望列变量引用每个后续元素,但仅限于该元素存在。我稍后将使用带有数值表达式的if语句的所有列变量。

data = 'LY R15 515 750 601 999'
remove_blanks = ['']
entries = data.split()
''.join([i for i in entries if i not in remove_blanks])
trash = (entries[0], entries[1])
time = int(entries[2])
column_1 = int(entries[3])
column_2 = int(entries[4])
column_3 = int(entries[5])
column_4 = int(entries[6])
column_5 = int(entries[7])
column_6 = int(entries[8])
column_7 = int(entries[9])
column_8 = int(entries[10])
column_9 = int(entries[11])
column_10 = int(entries[12])
column_11 = int(entries[13])
column_12 = int(entries[14])
column_13 = int(entries[15])
column_14 = int(entries[16])
column_15 = int(entries[17])
column_16 = int(entries[18])
column_17 = int(entries[19])
column_18 = int(entries[20])
print(entries)

我收到的错误:

  

column_3 = int(entries [5])

     

IndexError:列表索引超出范围

我知道它正在发生,因为列表中不存在该元素。基本上,如果一个元素不存在,我不希望考虑该变量。请帮忙!

P.S。我确信有一个更简单的方法来写这个,所以如果有,请告诉我!

2 个答案:

答案 0 :(得分:0)

将变量命名为column_1column_18并不是很方便。

而不是

column_1 = int(entries[3])
column_2 = int(entries[4])    
column_3 = int(entries[5])
... etc, etc ...

考虑

column = [None] + [int(v) for v in entries[3:]]

然后使用column[3]代替column_3

[None] +是一个闪避来获取列表下标(基于零)以匹配您的变量名称,这些名称是从1开始的。

答案 1 :(得分:0)

字典可能可以完成工作

variables = {}
for ix, value in enumerate(entries[3:]):
    variables["column_{0}".format(ix)] = int(value)

你得到了

{'column_1': 601, 'column_0': 750, 'column_2': 999}

但是,使用像pandas这样的包进行数据分析会更容易