Python-打印第n级子列表

时间:2018-07-04 21:24:31

标签: python list nested

我的清单安排很复杂。列表很多,其中一些还包含子列表。现在,将打印上述列表中的某些元素。更复杂的是,要打印的值的索引位于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工作表给出的长度。预先感谢。

2 个答案:

答案 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]