Как мне реализовать счетчик из этого цикла for в список по пониманию?

#python #list #list-comprehension #counter

#python #Список #список-понимание #счетчик

Вопрос:

Как я могу написать этот код

 def Serie_a(n):
    Serie_a = []
    m=0
    for i in [1..n]:
        m = m   1/i
        Serie_a.append(m)
    print Serie_a
  

в виде списка по пониманию?

Комментарии:

1. Если вам нужен только последний элемент (которого у вас, вероятно, нет, а просто предположение), вы можете сделать result = reduce(lambda x, y: x 1/float(y), range(1, n 1))

Ответ №1:

В настоящее время вы не можете написать понимание списка, которое было бы так же легко читать, как ваш for цикл. Вместо этого используйте itertools.accumulate .

 >>> list(accumulate(range(1,11), lambda acc, x: acc   1/x))
[1, 1.5, 1.8333333333333333, 2.083333333333333, 2.283333333333333, 2.4499999999999997, 2.5928571428571425, 2.7178571428571425, 2.8289682539682537, 2.9289682539682538]
  

В Python 3.8 выражения присваивания позволят вам написать

 % ./python.exe
Python 3.8.0a2 (tags/v3.8.0a2:23f4589b4b, Mar 18 2019, 15:16:44)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> m = 0
>>> [m := m   1/x for x in range(1,11)]
[1.0, 1.5, 1.8333333333333333, 2.083333333333333, 2.283333333333333, 2.4499999999999997, 2.5928571428571425, 2.7178571428571425, 2.8289682539682537, 2.9289682539682538]
  

Однако обратите внимание, что m необходимо инициализировать, прежде чем его можно будет использовать для понимания списка.