Вложенные списки - Python - PullRequest
0 голосов
/ 19 ноября 2018

Мне нужно написать тело метода Python, который выполняет следующее:

1) принимает список, где list [0] - это строка, а list [1] - это список, который выглядит одинаково или отсутствует

2) печатать каждую строку списка

Я должен использовать цикл while, а не использовать списки или выравнивание.

def pick_cherries_iter(field):
    """"e.g.
    >>> cherry_field = ['cherry1', ['cherry2', ['cherry3', ['cherry4', ['Yay!!!', None]]]]]
    >>> pick_cherries_iter(cherry_field)
    cherry1
    cherry2
    cherry3
    cherry4
    Yay!!!"""

    _______________________
    _______________________
    _______________________
    _______________________
    while _________________:
        _______________________
        _______________________
        _______________________

Я знаю, что для приведенного выше примера я могу напечатать cheery1, если я печатаю cherry_field [0] или cherry1 для cherry_field [1] [0] или cherry2 для cherry_filed [1] [1] [0] и т. Д., Однако я не являюсь уверен, как пройти через эти элементы, используя цикл while.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Я думаю, это должно сработать для вас.Пожалуйста, отметьте это.

Использование цикла цикла:

def pick_cherry(field):
    """"e.g.
    >>> cherry_field = ['cherry1', ['cherry2', ['cherry3', ['cherry4', ['Yay!!!',None]]]]]
    >>> pick_cherry(cherry_field)
    cherry1
    cherry2
    cherry3
    cherry4
    Yay!!!"""

    while field[1] != None:
        temp = field[0]
        print temp
        field = field[1]
    print field[0]

Использование функции Flatten (и рекурсии):

flatten_field = []

def pick_cherry(field):
    if field[1] != None:
        flatten_field.append(field[0])
        pick_cherry(field[1])
    else:
        flatten_field.append(field[0])

def flatten_func(field):
    """"e.g.
    >>> cherry_field = ['cherry1', ['cherry2', ['cherry3', ['cherry4', ['Yay!!!',None]]]]]
    >>> flatten_func(cherry_field)
    cherry1
    cherry2
    cherry3
    cherry4
    Yay!!!"""

    pick_cherry(field)

    for item in flatten_field:
        print item
0 голосов
/ 19 ноября 2018

Я бы сделал это рекурсивно, потому что у вас нет возможности узнать, является ли элемент списком или нет.

#!/usr/bin/python -E

cherry_field = ['cherry1', ['cherry2', ['cherry3', ['cherry4', ['Yay!!!', None]]]]]
def print_list(field):
    i = 0
    list_length = len(field)
    while i < list_length:
     if field[i] is not None and type(field[i]) is not list:
        print(field[i])
     else:
        if field[i] is not None:
           print_list(field[i])
     i += 1
     if i < list_length and type(field[i]) is list:
        print_list(field[i])
        i += 1


def pick_cherries(field):
    if type(field) is list:
       print_list(field)

pick_cherries(cherry_field)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...