Использование циклов while с для l oop в понимании списка - PullRequest
0 голосов
/ 23 января 2020
l1=[1,2,3,4,5,6,7]
l2=[1, 4, 9, 16, 25, 36, 49]
l3=[]
new_list=[]
i=1
while i<8:
    for num in l2:
        l3.append(num*i)
        i+=1
new_list.append(l3)
print(new_list)

Как мне преобразовать это в понимание списка?

    new_list=[new_list.append(num*i) while(i<8) for num in l2 i+=1]

Ожидаемый результат:

 new_list = [1, 8, 27, 64, 125, 216, 343]

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Сделайте так:

l1=[1,2,3,4,5,6,7]
l2=[1, 4, 9, 16, 25, 36, 49]
new_list = [i*j for i,j in zip(l1, l2)]
print(new_list)

Вывод

[1, 8, 27, 64, 125, 216, 343]
1 голос
/ 23 января 2020

Вы можете использовать понимание списка и zip:

[i*n for i, n in zip(range(1,8), l2)]

или itertools.starmap и operator.mul: (не забудьте импортировать их)

list(starmap(mul, zip(range(1,8), l2)))

Оба приведут к одному и тому же выводу:

from itertools import groupby, starmap, product
from operator import itemgetter, mul

l1 = range(1,8)
l2=[1, 4, 9, 16, 25, 36, 49]

new_list1 = [i*n for i, n in zip(l1, l2)]
new_list2 = list(starmap(mul, zip(l1, l2)))

print(new_list1)
print(new_list2)

Результаты:

[1, 8, 27, 64, 125, 216, 343]
[1, 8, 27, 64, 125, 216, 343]
...