5 ms·
You don't really appreciate Python until you try and program in something like Java again. The following code is readable and I have required a variation of it
by zepolen 16y ago
You don't really appreciate Python until you try and program in something like Java again.
The following code is readable and I have required a variation of it in a program before:
sorted([ord(c) for c in
set('letters in this sentence') & set('and this one')], reverse=True)
Doing it in Java would be a chore now.
- mcav 16y agoHere's a translation of that to Clojure, since I'm learning that now: (use 'clojure.set) (reverse (sort (map int (intersection (set "letters in this sentence") (set "and this one"))))) Edit: Take two... (use 'clojure.set) (->> (intersection (set "letters in this sentence") (set "and this one")) (map int) sort reverse) (experienced lispers, feel free to make this more idiomatic)
- mattrepl 16y agoHere's one using a list comprehension to make it more closely resemble the Python example. (require ['clojure.set :as 's]) (-> (for [c (s/intersection (set "letters in this sentence") (set "and this one"))] (int c)) sort reverse)
- sreque 16y agoNot sure why we are posting alternative language implementations, but here is the Scala version :). You could say that this was an exercise for me in learning 2.8, which I am unfamiliar with. A for comprehension isn't needed because Scala already treats Strings as a sequence of characters. (Set("letters in this sentence":_* ) & Set("and this one":_* )).toSeq.sorted.reverse Or you, can take advantage of Scala's rich choice of collections. import scala.collection.immutable.TreeSet import scala.math.Ordering._ TreeSet("letters in this sentence":_* )(Char.reverse) & Set("and this one":_* ) toSeq The machinery Scala has in place to make the second example work is quite impressive, and I was pleased to see that it worked. Even though the intersection method returns a brand new set, using implicit arguments it correctly creates a set of the correct type (TreeSet) with the correct ordering function (Char.reverse), without any duplication of code in the standard library (like overriding '&' in every sub-class).
- wycats 16y agoAn easier Ruby solution would be: ("letters in this sentence" + "and this one").chars.sort.reverse
- sreque 16y agoExcept you aren't using sets, so you get duplicate characters. I can just as easily write ("letters in this sentence" + "and this one").toSeq.sorted.reverse in scala. You could tag the end of your ruby statement with .uniq and you would be fine. Alternatively, you could wrap the above scala statement in TreeSet(). These solutions process things in a significantly different way than was done by the OP, though.
- wcarss 16y ago("letters in this sentence".split(//) & "and this one".split(//)).sort.reverse.join I'm just learning, but I think this performs it correctly with sets.
- AndyKelley 16y agoI find the python code much more readable.
- lelele 16y agoIMO, both suck at readability, since you have to read inner expressions first. An example with a "pipe" would be clearer.
- xtho 16y agoDoesn't python have sorted sets? Oh, what a pity. Does python only have one single implementation of sets? Too bad. Is the runtime behaviour of that implementation documented? Let's take a look ... I'll be back. This could take a while.
- pjscott 16y agoPython has sets as a built-in datatype. If someone needs a different implementation, there's nothing stopping them from writing one.
- sreque 16y agoA couple of points. 1. I love python. 2. The OP was being a troll. 3. People need to be more honest about themselves and their favorite pet languages. I can write a sorted set in assembler too, if I wanted. However, there's been several times that I've wanted a sorted set data type while coding in Python but found that none was easily available. I hate the, "you can write your own!" counterpoint, because it is essentially meaningless unless you can prove that writing your own is as trivial as importing someone else's implementation.
- pjscott 16y agoI didn't mean to imply that lacking a sorted set datatype wasn't a pain in the ass; I was pointing out that the lack of multiple set implementations is a tradeoff that we make for all built-in datatypes that could support other operations but don't. (Personally, I would love to have the ability to pick a random element from a set. That would be great.) By the way, in case anybody was wondering, here is a (relatively inefficient) way of making a sorted set in python: http://code.activestate.com/recipes/576694/ http://code.activestate.com/recipes/576694/
- silvertab 16y agoCouldn't you just do the following? from random import choice choice(list(myset)) (I'm guessing you'd want to do it without having to convert it to a list first?)
- Lewisham 16y agoI'm not sure any decent Java developers would encourage starting a new project in Java anymore. This is exactly the sort of thing that Scala is just as good at. Scala isn't as succinct, of course, but it gets much closer!
- sreque 16y agoIf you look at my Scala examples above, they are both more succinct than their Clojure and Python counterparts.
- deleted 16y ago[deleted]