Как мне выполнять задания в понимании списка? - PullRequest
2 голосов
/ 12 апреля 2019

Итак, при создании тестовых примеров для tress в Python 3.6 мне было интересно, есть ли хороший способ выполнять такие действия, как присваивание, в понимании списка.Должен ли я использовать лямбда?

Я хочу вставить

Prev_Node.next = Node(i)
Prev_Node = Node(i)

в

iList = [1,2,3,4,10]
Prev_Node = Node(iList[0])
l1 = [Node(i) <Any assignment action?> for i in iList[1:])]

Спасибо, что уделили время заранее,

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Используйте итераторы для обхода своего списка, не тратьте с собой .Next и т. Д., Чтобы создать свой собственный.

Если вы ищете список головы и хвоста, то вы можете сделать что-то вроде:

int_list = [1, 2, 3, 4, 10]
node_list = [Node(i) for i in int_list]
head = node_list[0]  # Get the head Node and leave it in the list.
head, *tail = node_list  # Get the head Node and remove it from the list.

и повторять как

for node in node_list:
    print(node)

Взгляните на различные функции списка о том, как в дальнейшем манипулировать существующим списком.

0 голосов
/ 12 апреля 2019

Вы не можете выполнять задания в пределах списка.Попытка сделать это вызывает `SyntaxError, например:

[x = 0 for _ in range(1)]
# SyntaxError: invalid syntax

Я полагаю, что ужасный хак, чтобы попытаться достичь этого, мог бы определить функцию, которую вы вызываете в понимании списка, который выполняет назначение (используя глобальныепеременные).Но это было бы намного хуже, чем просто использовать обычный цикл for вместо понимания списка.По сути, всякий раз, когда использование понимания списка не работает сразу, вам, вероятно, лучше использовать цикл for.Вам будет легче программировать, а другим - понимать.

# hacky; don't do this
def set_x(val):
    global x
    x = val

[set_x(i) for i in range(3)]
x # 2
...