我有一个复杂的列表安排。有许多列表,其中一些列表有子列表。现在,上述列表中的一些元素将被打印出来。更复杂的是,要打印的值的索引在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表给出的长度。提前谢谢。
发布于 2018-07-05 12:27:56
假设你有这样的数据:
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]
发布于 2018-07-05 06:02:49
你能贴一个更好的例子吗?你的列表是什么样子的,打印时想要的输出是什么?
您可以打开文件,读取要打印到列表中的索引和列表名称,然后迭代该列表以打印所需内容。
有许多方法可以打印一个简单的列表,您可以使用:
mylist = ['hello', 'world', ':)']
print ', '.join(mylist)
mylist2 = [['hello', 'world'], ['Good', 'morning']]
for l in mylist2:
print(*l)
https://stackoverflow.com/questions/51180906
复制相似问题