Python- печать подсписка n-го уровня - PullRequest
0 голосов
/ 05 июля 2018

У меня сложное оформление списка. Есть много списков, и некоторые из них имеют подсписки. Теперь некоторые элементы из вышеупомянутых списков должны быть напечатаны. Что делает его более сложным, так это то, что индекс значения для печати находится в файле 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 голосов
/ 05 июля 2018

Предположим, у вас есть такие данные:

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]
0 голосов
/ 05 июля 2018

Можете ли вы опубликовать лучший пример? как выглядит ваш список и каков желаемый результат при печати?

Вы можете открыть файл, прочитать индексы и списки имен, которые хотите распечатать, в список и выполнить итерацию этого списка для печати того, что вы хотите.

Существует много способов напечатать список, который вы можете использовать:

mylist = ['hello', 'world', ':)']
print ', '.join(mylist)


mylist2 = [['hello', 'world'], ['Good', 'morning']]
for l in mylist2:
   print(*l)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...