Python Forum
Translating this to a list comprehension?
Thread Rating:
  • 2 Vote(s) - 3.5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Translating this to a list comprehension?
#1
Hi,

Say that I have these for-loops:
s = ''

for y in range(a):
    for x in range(b):
        if (x, y) in some_collection:
            s += 'x'
        else:
            s += '-'

    s += '\n'
I want to translate it into a list comprehension (for fun, as an exercise  Wink ) , and I've come this far:
''.join(['x' if (x, y) in some_collection else '-' for y in range(a) for x in range(b)])
But I still need to add a newline character ('\n') after every iteration of the first loop. How do I do that? Is it even possible?


Thanks!

/gb
Reply
#2
what does some_collection look line?
Reply
#3
Smile 
If it's of any importance, it's a set consisting of tuples on the form (int, int).

Thanks!  Wink
Reply
#4
I should have explained why I wanted to know.
In order to make sure a response is correct, we like to test it before replying.
The snippet of code will not run without an actual example.
We answer hundreds of requests on this forum daily, so need snippets that will
work 'out of the box', and don't usually have time to create these ourselves (will do
sometimes when traffic is slow).
Reply
#5
Oh, okay, completely understandable (I'm new to the forum Smile ).

If we say that some_collection is defined as follows:
some_collection = {(3, 2), (0, 0), (2, 0), (2, 2), (4, 2), (1, 0)}
Then follows that a >= 2 (the greatest y) and b >= 4 (the greatest x). For the code to make sense, it should actually look like this:

some_collection = {(3, 2), (0, 0), (2, 0), (2, 2), (4, 2), (1, 0)}
s = ''
 
for y in range(2, -1, -1):
    for x in range(4 + 1):
        if (x, y) in some_collection:
            s += 'x'
        else:
            s += '-'
 
    s += '\n'

print(s)
When run it produces the following output:
--xxx
-----
xxx--
In other words it's printing a coordinate system. Meanwhile, my own list comprehension solution:
''.join(['x' if (x, y) in some_collection else '-' for y in range(2, -1, -1) for x in range(4 + 1)])
Produces this faulty output:
--xxx-----xxx--
It lacks line breaks, and I don't know how to add them in the list comprehension or if it's even possible.


I hope that clear things up! Thanks.  Big Grin

/gb
Reply
#6
You don't want a list but a string. That's why you wrap the comprehended list inside ''.join()

Now if you want to add newlines characters after each row, you would need to wrap the inside list into '\n'.join() as well.
Reply
#7
Oh, of course. Thanks!

Working code:
'\n'.join([''.join(['x' if (x, y) in some_collection else '-' for x in range(5)]) for y in range(2, -1, -1)])
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  List Comprehension Issue johnywhy 5 440 Jan-14-2024, 07:58 AM
Last Post: Pedroski55
Question mypy unable to analyse types of tuple elements in a list comprehension tomciodev 1 427 Oct-17-2023, 09:46 AM
Last Post: tomciodev
  Using list comprehension with 'yield' in function tester_V 5 1,176 Apr-02-2023, 06:31 PM
Last Post: tester_V
  list comprehension 3lnyn0 4 1,360 Jul-12-2022, 09:49 AM
Last Post: DeaD_EyE
  List comprehension used differently coder_sw99 3 1,680 Oct-03-2021, 04:12 PM
Last Post: coder_sw99
  How to invoke a function with return statement in list comprehension? maiya 4 2,752 Jul-17-2021, 04:30 PM
Last Post: maiya
  List comprehension and Lambda cametan 2 2,199 Jun-08-2021, 08:29 AM
Last Post: cametan
  What is the difference between a generator and a list comprehension? Pedroski55 2 2,176 Jan-02-2021, 04:24 AM
Last Post: Pedroski55
  For Loop with List Comprehension muzikman 25 6,410 Dec-18-2020, 10:45 PM
Last Post: muzikman
  Using recursion instead of for loops / list comprehension Drone4four 4 3,072 Oct-10-2020, 05:53 AM
Last Post: ndc85430

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020