Bottom Page

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
Quote
#2
what does some_collection look line?
Quote
#3
Smile 
If it's of any importance, it's a set consisting of tuples on the form (int, int).

Thanks!  Wink
Quote
#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).
Mekire likes this post
Quote
#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
Quote
#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.
nilamo likes this post
Quote
#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)])
nilamo likes this post
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  Simple list comprehension misunderstanding Mark17 3 177 Oct-10-2019, 07:00 PM
Last Post: buran
  Creating a list from a comprehension using a list rm197 6 122 Sep-30-2019, 07:02 PM
Last Post: rm197
  list comprehension : print column as row pyseeker 4 197 Sep-05-2019, 05:40 AM
Last Post: pyseeker
  question about list comprehension Exsul 3 144 Aug-22-2019, 08:27 AM
Last Post: DeaD_EyE
  List comprehension Uchikago 3 251 Jul-18-2019, 12:59 AM
Last Post: scidam
  making the code easier, list comprehension go127a 2 241 May-26-2019, 06:19 PM
Last Post: Gribouillis
  dictionary: print key/value with list(dict) comprehension wardancer84 4 490 Nov-14-2018, 03:14 PM
Last Post: wardancer84
  List Comprehension to exclude first row tkj80 5 1,547 Jun-11-2018, 09:24 AM
Last Post: volcano63
  need 2x elements in list comprehension Skaperen 7 1,099 Apr-30-2018, 02:16 AM
Last Post: Skaperen
  list comprehension HenryJ 3 746 Feb-21-2018, 12:43 PM
Last Post: buran

Forum Jump:


Users browsing this thread: 1 Guest(s)