我的清单安排很复杂。列表很多,其中一些还包含子列表。现在,将打印上述列表中的某些元素。更复杂的是,要打印的值的索引位于excel文件中,如下所示:
[list_1,1,2] #Means - list[1][2] is to be printed (sub-lists are there)
[list_2,7] #Means - list_2[7] is to be printed (no sub-list)
................
[list_100,3,6] #Means list_100[3][6] is to be printed (sub list is there)
列表的数目很长,所以我使用了一个for循环和多个 if语句。例如(伪代码):
for i in range(100): #because 100 lists are there in excel
if len(row_i) == 3:
print(list_name[excel_column_1_value][excel_column_2_value])
else:
print(list_name[excel_column_1_value])
请注意,excel工作表仅用于获取列表名称和索引,列表全部保存在主代码中。
有什么办法可以避免if statements
并使该部分自动化?询问原因,if条件值仅基于excel工作表给出的长度。预先感谢。
答案 0 :(得分:1)
您能发表一个更好的例子吗?您的列表看起来如何,打印时所需的输出是什么?
您可以打开文件,读取索引并在列表中列出要打印的名称,然后对该列表进行迭代以打印所需的内容。
有很多方法可以打印一个简单的列表,您可以使用:
mylist = ['hello', 'world', ':)']
print ', '.join(mylist)
mylist2 = [['hello', 'world'], ['Good', 'morning']]
for l in mylist2:
print(*l)
答案 1 :(得分:1)
假设您有这样的数据:
data = {
"list1": [[100, 101, 102], [110, 111, 112], [120, 121, 123]],
"list2": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
"list3": [[200, 201, 202], [210, 211, 212], [220, 221, 223]],
}
如果这是家庭作业,您的老师可能希望您使用递归来解决它,但是我建议在Python中使用迭代版本,除非您可以确保不会堆叠超过999个调用:
fetch_element(data, listname, *indices):
value = data[listname]
for index in indices:
value = value[index]
return value
然后您便拥有所需的元素列表:
desired = [
["list1", 0, 0],
["list2", 7],
["list3", 2, 2],
]
现在您可以这样做:
>>> [fetch_element(data, *line) for line in desired]
[100, 7, 223]
与以下相同:
>>> [data["list1"][0][0], data["list2"][7], data["list3"][2][2]]
[100, 7, 223]