Имам основен въпрос относно разбирането на списъка с цикли FOR за конкретно отпечатване на шаблони

Това е основен код за отпечатване на шаблони "for цикъл", както следва:

for i in range (1,5):
    for j in range (i, 5):
        print(j , end='')
    print()

изход:

1234
234
34
4

Но аз искам същото като горния изход, използвайки същата логика, използвайки List Comprehension.

за разбиране на списъка.

Опитах :

[print(j,end='') for i in range(1,5) for j in range(i,5)]

и изходът е:

1234234344

person Sheshank Ranaware    schedule 27.05.2020    source източник
comment
не използвайте списъчни разбирания за странични ефекти   -  person juanpa.arrivillaga    schedule 28.05.2020
comment
Нищо във вашето разбиране не съответства на самотния print() на кода на цикъла, но както казаха други -- лоша идея е да използвате разбиране на списък за странични ефекти.   -  person John Coleman    schedule 28.05.2020
comment
Наистина важното нещо, което трябва да разберете, е, че списъчните разбирания не са for цикли. Те са конструкции за функционално програмиране, предназначени да прилагат операции за картографиране/филтриране върху итерируеми елементи за създаване на списък. Те са декларативни конструкции. For циклите са основни изрази за контролен поток, те са императивни конструкции. Две различни парадигми и изобщо не бива да мислите за разбирането на списък като просто за цикъл от един ред   -  person juanpa.arrivillaga    schedule 28.05.2020
comment
Благодаря ви за вникването в концепцията. Ще го имам предвид[email protected],@John Coleman   -  person Sheshank Ranaware    schedule 31.05.2020


Отговори (2)


Можете да подходите към това, като използвате вместо това функция:

def myfn(i):
    for j in range(i,5):
        print(j,end='')
    print()


[myfn(i) for i in range(1,5) ]
person Tarek AS    schedule 27.05.2020
comment
Казах това в отговора си, но ще го кажа и тук: не използвайте разбиране на списък за странични ефекти - person wjandrea; 28.05.2020
comment
Току-що предложих този отговор, ако има причина зад задаването на въпроса.. в противен случай Да, не използвайте подхода за разбиране на списък! :) - person Tarek AS; 28.05.2020
comment
@Tarekas, Благодаря за решението. Това ми даде още един подход. Но основно търсех концепция за разбиране на списък. - person Sheshank Ranaware; 31.05.2020

Не използвайте списък с разбиране за странични ефекти, вместо това използвайте обикновен for-цикъл, т.е. вашия оригинален код.

Но ето как бихте го направили, като използвате разопаковане вместо втори цикъл:

[print(*range(i, 5), sep='') for i in range(1, 5)]

Така че можете да направите това вместо това:

for i in range(1, 5):
    print(*range(i, 5), sep='')
person wjandrea    schedule 27.05.2020
comment
Благодаря @wjandrea, отговорът ви е полезен. Това изчисти объркването. Няма странични ефекти. - person Sheshank Ranaware; 31.05.2020