feedthemachine
feedthemachine

Reputation: 620

for loop's List Comprehension

How can I make each symbol from lowercase to be paired with each symbol from digits?

lowercase = 'abcdef'
digits = '012'

The following returns generator:

(((i + (lambda x: y)(digits)) for y in digits) for i in lowercase)

What I have found is either list() or [] around generator should return the right content but neither of ones below ever worked:

print(list((((i + (lambda x: y)(digits)) for y in digits) for i in lowercase)))
print(list(((i + (lambda x: y)(digits)) for y in digits) for i in lowercase))
print(list((i + (lambda x: y)(digits)) for y in digits) for i in lowercase)
print(list(i + (lambda x: y)(digits) for y in digits) for i in lowercase)
print([(i + (lambda x: y)(digits) for y in digits)] for i in lowercase)
[<generator object <genexpr>.<genexpr> at 0x03329D80>, <generator object <genexpr>.<genexpr> at 0x03329DB0>, <generator object <genexpr>.<genexpr> at 0x03329DE0>, <generator object <genexpr>.<genexpr> at 0x03329E10>, <generator object <genexpr>.<genexpr> at 0x03329E40>, <generator object <genexpr>.<genexpr> at 0x03329E70>]
[<generator object <genexpr>.<genexpr> at 0x03329D80>, <generator object <genexpr>.<genexpr> at 0x03329DB0>, <generator object <genexpr>.<genexpr> at 0x03329DE0>, <generator object <genexpr>.<genexpr> at 0x03329E10>, <generator object <genexpr>.<genexpr> at 0x03329E40>, <generator object <genexpr>.<genexpr> at 0x03329E70>]
<generator object <genexpr> at 0x01605E70>
<generator object <genexpr> at 0x01605E70>
<generator object <genexpr> at 0x01605E70>

Upvotes: 0

Views: 54

Answers (2)

Maurice Meyer
Maurice Meyer

Reputation: 18136

List comprehensions surrounded by round brackets create a generator, square brackets create a list: Btw. you could rewrite the lambda expression, using string formatting:

>>> lowercase = 'abcdef'
>>> digits = '012'
>>> 
>>> ["%s%s" % (c, d) for c in lowercase for d in digits]
['a0', 'a1', 'a2', 'b0', 'b1', 'b2', 'c0', 'c1', 'c2', 'd0', 'd1', 'd2', 'e0', 'e1', 'e2', 'f0', 'f1', 'f2']
>>> ("%s%s" % (c, d) for c in lowercase for d in digits)
<generator object <genexpr> at 0x7f0d558b64b0>

Upvotes: 0

Luchko
Luchko

Reputation: 1153

I guess it what you want if i have understood you correctly

lowercase = 'abcdef'
digits = '012'

[letter+digit for letter in lowercase for digit in digits]

>>>['a0', 'a1', 'a2', 'b0', 'b1', 'b2', 'c0', 'c1', 'c2', 'd0', 'd1', 'd2', 'e0', 'e1', 'e2', 'f0', 'f1', 'f2']

Upvotes: 1

Related Questions