Вопрос: Объясните метод понимания списка питонов


Может кто-нибудь, пожалуйста, объясните этот бит кода, пожалуйста.

>>> guest=['john','sue','chris']
>>> [(a,b,c) for a in guest for b in guest for c in guest]

С этими результатами ...

[('john', 'john', 'john'), ('john', 'john', 'sue'), ('john', 'john', 'chris'), ('john', 'sue', 'john'), ('john', 'sue',
'sue'), ('john', 'sue', 'chris'), ('john', 'chris', 'john'), ('john', 'chris', 'sue'), ('john', 'chris', 'chris'), ('sue
', 'john', 'john'), ('sue', 'john', 'sue'), ('sue', 'john', 'chris'), ('sue', 'sue', 'john'), ('sue', 'sue', 'sue'), ('s
ue', 'sue', 'chris'), ('sue', 'chris', 'john'), ('sue', 'chris', 'sue'), ('sue', 'chris', 'chris'), ('chris', 'john', 'j
ohn'), ('chris', 'john', 'sue'), ('chris', 'john', 'chris'), ('chris', 'sue', 'john'), ('chris', 'sue', 'sue'), ('chris'
, 'sue', 'chris'), ('chris', 'chris', 'john'), ('chris', 'chris', 'sue'), ('chris', 'chris', 'chris')]

Я понимаю, что (a, b, c) создает три значения кортежа, но я не понимаю, что происходит с циклами. благодаря


4


источник


Ответы:


Это вложенное понимание списка, и вы можете развернуть петли в том же порядке, который они появляются в понимании, чтобы понять, что происходит:

result = []
for a in guest:
    for b in guest:
        for c in guest:
            # yield (a,b,c)
            result.append((a,b,c))

6



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

guest=['john','sue','chris']
three_guest_list = []    

for a in guest:
    for b in guest:
        for c in guest:
            three_guest_list.append((a,b,c))

print three_guest_list

Понимание списка - это всего лишь способ выразить петли более лаконично.

Надеюсь это поможет!


1