One-line Python Code that returns a sequence of integers

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
4 replies · 4K views
mathmari
Gold Member
MHB
Messages
4,984
Reaction score
7
Hey! 😊

I want to write a one-line Python generator or iterator expression that returns the sequence of integers generated by repeatedly adding the ascii values of each letter in the word ā€œCloseā€ to itself. The first 10 integers in this sequence are: 67, 175, 286, 401, 502, 569, 677, 788, 903, 1004. If the code should not be in one line it would be as follows, or not ?
Code:
sum = 0 
for letter in list("Close") : 
    sum += ord(letter) 
    print(sum)
So that we write that in oe line the for-loop will be
Code:
sum += [ord(letter) for letter in list("Close")]
right? But how do we add at this line the print? :unsure:
 
Physics news on Phys.org
mathmari said:
Code:
sum = 0
for letter in list("Close") :
    sum += ord(letter)
    print(sum)
Hey mathmari!

Shouldn't the loop be repeated? (Wondering)

mathmari said:
So that we write that in oe line the for-loop will be
Code:
sum += [ord(letter) for letter in list("Close")]
right? But how do we add at this line the print?
This doesn't parse since we can't add a list to a number. :oops:

I googled how to calculate a cumulative sum in python and found numpy.cumsum.
That is, we can do import numpy; numpy.cumsum([1,2,3]).

We can repeat a list by multiplying it with a number. For instance 5 * [ord(letter) for letter in list("Close")].

We can print a resulting list by calling print before it. For instance print [1,2,3].
šŸ¤”
 
Klaas van Aarsen said:
I googled how to calculate a cumulative sum in python and found numpy.cumsum.
That is, we can do import numpy; numpy.cumsum([1,2,3]).

We can repeat a list by multiplying it with a number. For instance 5 * [ord(letter) for letter in list("Close")].

We can print a resulting list by calling print before it. For instance print [1,2,3].
šŸ¤”

Ahh ! So we should write print(numpy.cumsum([ord(letter) for letter in list("Close") ])) , right? :unsure:
 
mathmari said:
Ahh ! So we should write print(numpy.cumsum([ord(letter) for letter in list("Close") ])) , right?
Yep. (Nod)
And if we add a multiplier before the list, we get:
Python:
>>> print(numpy.cumsum(3 * [ord(letter) for letter in list("Close")]))
[  67  175  286  401  502  569  677  788  903 1004 1071 1179 1290 1405 1506]
It matches the first 10 integers in the opening post. šŸ¤”
 
Klaas van Aarsen said:
Yep. (Nod)
And if we add a multiplier before the list, we get:
Python:
>>> print(numpy.cumsum(3 * [ord(letter) for letter in list("Close")]))
[  67  175  286  401  502  569  677  788  903 1004 1071 1179 1290 1405 1506]
It matches the first 10 integers in the opening post. šŸ¤”

Ah ok! I got it! Thank you very much! :geek: