Translating this to a list comprehension? - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Translating this to a list comprehension? (/thread-1257.html) |
Translating this to a list comprehension? - gblomqvist - Dec-18-2016 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 ) , 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 RE: Translating this to a list comprehension? - Larz60+ - Dec-18-2016 what does some_collection look line? RE: Translating this to a list comprehension? - gblomqvist - Dec-18-2016 If it's of any importance, it's a set consisting of tuples on the form (int, int). Thanks! RE: Translating this to a list comprehension? - Larz60+ - Dec-19-2016 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). RE: Translating this to a list comprehension? - gblomqvist - Dec-19-2016 Oh, okay, completely understandable (I'm new to the forum ). 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. /gb RE: Translating this to a list comprehension? - Kebap - Dec-19-2016 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.
RE: Translating this to a list comprehension? - gblomqvist - Dec-19-2016 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)]) |