Re: [Tutor] Which version of python should i use?
Subject: Re: [Tutor] Which version of python should i use? Hello Amal, On Mon, May 20, 2013 at 11:24 PM, Amal Thomas amalthomas...@gmail.com wrote: Thank you very much..!! I am starting to learn python for my Bioinformatics work, so I would look for the version that has libraries helpful for me.. Do you already have any libraries in mind (or aware of) that you would want to use? I came across this link: http://intro-prog-bioinfo-2012.wikispaces.com/, which doesn't seem to use any specific tools other than the generic libraries that are pretty much common in any scientific work involving Python: SciPy, Numpy, etc. Also check out Python(x, y) (http://code.google.com/p/pythonxy/): Python(x,y) is a free scientific and engineering development software for numerical computations, data analysis and data visualization based on Python programming language, Qt graphical user interfaces and Spyder interactive scientific development environment. ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] reducing lists within list to their set of unique values
Message: 6 Date: Tue, 21 May 2013 09:45:17 +1000 From: Steven D'Aprano st...@pearwood.info To: tutor@python.org Subject: Re: [Tutor] reducing lists within list to their set of unique values Message-ID: 519ab58d.9020...@pearwood.info Content-Type: text/plain; charset=UTF-8; format=flowed On 21/05/13 08:49, Treder, Robert wrote: Hi python folks, I have a list of lists that looks something like this: tst = [ [], ['test'], ['t1', 't2'], ['t1', 't1', 't2'] ] I want to change the empty sets to a blank string, i.e., '' and the lists with repeat values to the unique set of values. So I have done the following: for t in tst: if len(t) == 0: tst.__setitem__(tst.index(t), '') else: tst.__setitem__(tst.index(t), set(t)) As a general rule, if you are writing double-underscore special methods like __setitem__ directly, you're doing it wrong. (There are exceptions, but consider them for experts.) So instead of tst.__setitem__(a, b) you should write tst[a] = b. But that's still the wrong way to do this! You're doing a lot of extra work with the calls to tst.index. You won't notice for a short list like the example above, but for a long list, this will get really, really slow. The way to do this is to keep track of the index as you walk over the list, and not recalculate it by searching the list: for index, item in enumerate(tst): if item == []: item = else: item = list(set(item)) tst[index] = item Notice that I call set() to get the unique values, then list() again to turn it back into a list. This does the job you want, but it is not guaranteed to keep the order: py L = ['b', 'd', 'c', 'a', 'b'] py list(set(L)) ['a', 'c', 'b', 'd'] If keeping the order is important, you cannot use set, and you'll need another way to extract only the unique values. Ask if you need help on that. Thanks, Steven. Very helpful. It looks like the order is only changed on the inner list that set() is applied to, not on the outer list since the outer list order is controlled by index. For this application I don't care about the order of the inner lists. However there are other applications where that will be import. Can you please describe the alternate method for extracting the unique values that maintains order. Thanks, Bob What I get in return is tst ['', set(['test']), set(['t2', 't1']), set(['t2', 't1'])] The empty list is fine but the other lists seem to be expressions rather than values. What do I need to do to simply get the values back liike the following? ['', ['test'], ['t2', 't1'], ['t2', 't1']] They are values. It is just that they are *sets* rather than *lists*. When printed, lists have a nice compact representation using square brackets [], but unfortunately sets do not. However, if you upgrade to Python 3, they have been upgraded to look a little nicer: # Python 2: set(['a', 'c', 'b', 'd']) # Python 3 {'d', 'b', 'c', 'a'} Notice that the order of the items is not guaranteed, but apart from that, the two versions are the same despite the difference in print representation. -- Steven NOTICE: Morgan Stanley is not acting as a municipal advisor and the opinions or views contained herein are not intended to be, and do not constitute, advice within the meaning of Section 975 of the Dodd-Frank Wall Street Reform and Consumer Protection Act. If you have received this communication in error, please destroy all electronic and paper copies and notify the sender immediately. Mistransmission is not intended to waive confidentiality or privilege. Morgan Stanley reserves the right, to the extent permitted under applicable law, to monitor electronic communications. This message is subject to terms available at the following link: http://www.morganstanley.com/disclaimers. If you cannot access these links, please notify us by reply message and we will send the contents to you. By messaging with Morgan Stanley you consent to the foregoing. ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] reducing lists within list to their set of unique values
On 21 May 2013 14:31, Treder, Robert robert.tre...@morganstanley.com wrote: Steven wrote: py L = ['b', 'd', 'c', 'a', 'b'] py list(set(L)) ['a', 'c', 'b', 'd'] If keeping the order is important, you cannot use set, and you'll need another way to extract only the unique values. Ask if you need help on that. Thanks, Steven. Very helpful. It looks like the order is only changed on the inner list that set() is applied to, not on the outer list since the outer list order is controlled by index. For this application I don't care about the order of the inner lists. However there are other applications where that will be import. Can you please describe the alternate method for extracting the unique values that maintains order. There isn't necessarily a uniquely defined ordering. Here's a function that preserves the order of the first occurrences of each element in each list: def uniquify(original): new = [] seen = set() for item in original: if item not in seen: new.append(item) seen.add(item) return new uniquify([1, 2, 3, 1, 2, 5]) [1, 2, 3, 5] Oscar ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
[Tutor] Hi Folks...Need help with a modified version of the Subset sum problem.
Hi there Tutor folks I need your help with a modified version of the subset sum problem [ http://en.wikipedia.org/wiki/Subset_sum_problem]. The problem i am facing is a bit hard to describe (as most complex problem always are :D ), so please bear with my longish articulation :) Here it goes : After scrubbing some input data, i have two lists 'minutes' (elements are positive integers) 'names' (elements are strings). They are the exact same length and each element of one corresponds exactly with the respective element of the other. The elements in the minutes list are not unique; a sample list is : minutes = [60, 45, 30, 45, 45, 5, 60, 45, 30, 30, 45, 60, 60, 45, 30, 30, 60, 30, 30 ] names = ['abc', 'ghi', 'jkl', 'def', 'zab', 'wux', ... ] Now i need to pick some elements from the 'minutes' list (i.e. a subset of minutes) which add up to a certain sum ('target_sum1'). I have to then do some processing with the *respective elements from the 'names' list, corresponding to, the elements i just picked from the 'minutes' list which sum upto target_sum1.* I now have to remove these elements i picked (which add up to 'target_sum1' ) from the 'minutes' list, and essentially do a second pass, picking some elements, which add up to a certain other sum ('target_sum2'). Again, *retrieve the elements from the 'names' list*, *corresponding to the elements i just picked which sum upto 'target_sum2'*, do some processing on them. And so on. Picking a subset of numbers, which add up to a certain target sum, is a well-known problem[1] i have found the following code for it [2] : I also have the code on a github gist https://gist.github.com/anonymous/5620886 def subset_sum_recursive(numbers,target,partial): s = sum(partial) #check if the partial sum is equals to target if s == target: print sum(%s)=%s%(partial,target) if s = target: return # if we reach the number why bother to continue for i in range(len(numbers)): n = numbers[i] remaining = numbers[i+1:] subset_sum_recursive(remaining,target,partial + [n]) def subset_sum(numbers,target): #we need an intermediate function to start the recursion. #the recursion starts with an empty list as partial solution. subset_sum_recursive(numbers,target,list()) if __name__ == __main__: minutes = [3,9,8,4,5,7,10] target_sum = 15 subset_sum(minutes,target_sum) #Outputs: #sum([3, 8, 4])=15 #sum([3, 5, 7])=15 #sum([8, 7])=15 #sum([5, 10])=15 This above code returns the elements of the 'minutes' list(subset of the 'minutes' list) which add up to 'target_sum'. *I am stuck on this point : * *I am unable to determine the list indices, of the elements of 'minutes' which add upto 'target_sum1', so i can retrieve the corresponding elements from the 'names' list, do my processing on them.* * * *I also need the list indices to remove the elements which add upto target_sum1, and then run a second pass, to determine the elements which add upto 'target_sum2'.* Any all explanations/links/code snippets/thoughts/ideas/suggestions/feedback/comments/ of the Python tutor community would be greatly appreciated. Thanks a ton, calvin spiff...@gmail.com References 1. http://en.wikipedia.org/wiki/Subset_sum_problem 2. http://stackoverflow.com/a/4633515/559456 ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Hi Folks...Need help with a modified version of the Subset sum problem.
spiff007 wrote: Hi there Tutor folks I need your help with a modified version of the subset sum problem [ http://en.wikipedia.org/wiki/Subset_sum_problem]. The problem i am facing is a bit hard to describe (as most complex problem always are :D ), so please bear with my longish articulation :) Here it goes : After scrubbing some input data, i have two lists 'minutes' (elements are positive integers) 'names' (elements are strings). They are the exact same length and each element of one corresponds exactly with the respective element of the other. The elements in the minutes list are not unique; a sample list is : minutes = [60, 45, 30, 45, 45, 5, 60, 45, 30, 30, 45, 60, 60, 45, 30, 30, 60, 30, 30 ] names = ['abc', 'ghi', 'jkl', 'def', 'zab', 'wux', ... ] Now i need to pick some elements from the 'minutes' list (i.e. a subset of minutes) which add up to a certain sum ('target_sum1'). I have to then do some processing with the *respective elements from the 'names' list, corresponding to, the elements i just picked from the 'minutes' list which sum upto target_sum1.* I now have to remove these elements i picked (which add up to 'target_sum1' ) from the 'minutes' list, and essentially do a second pass, picking some elements, which add up to a certain other sum ('target_sum2'). Again, *retrieve the elements from the 'names' list*, *corresponding to the elements i just picked which sum upto 'target_sum2'*, do some processing on them. And so on. Picking a subset of numbers, which add up to a certain target sum, is a well-known problem[1] i have found the following code for it [2] : I also have the code on a github gist https://gist.github.com/anonymous/5620886 def subset_sum_recursive(numbers,target,partial): s = sum(partial) #check if the partial sum is equals to target if s == target: print sum(%s)=%s%(partial,target) if s = target: return # if we reach the number why bother to continue for i in range(len(numbers)): n = numbers[i] remaining = numbers[i+1:] subset_sum_recursive(remaining,target,partial + [n]) def subset_sum(numbers,target): #we need an intermediate function to start the recursion. #the recursion starts with an empty list as partial solution. subset_sum_recursive(numbers,target,list()) if __name__ == __main__: minutes = [3,9,8,4,5,7,10] target_sum = 15 subset_sum(minutes,target_sum) #Outputs: #sum([3, 8, 4])=15 #sum([3, 5, 7])=15 #sum([8, 7])=15 #sum([5, 10])=15 This above code returns the elements of the 'minutes' list(subset of the 'minutes' list) which add up to 'target_sum'. *I am stuck on this point : * *I am unable to determine the list indices, of the elements of 'minutes' which add upto 'target_sum1', so i can retrieve the corresponding elements from the 'names' list, do my processing on them.* I think the easiest approach is to combine the two lists into a single one pairs = zip(names, minutes) or, if you really need the indices pairs = list(enumerate(minutes)) and invoke subset_sum() with these pairs instead of minutes alone. Of course you have to modify the sum() call to unpack the pairs: s = sum(value for index, value in partial) *I also need the list indices to remove the elements which add upto target_sum1, and then run a second pass, to determine the elements which add upto 'target_sum2'.* Any all explanations/links/code snippets/thoughts/ideas/suggestions/feedback/comments/ of the Python tutor community would be greatly appreciated. Thanks a ton, calvin spiff...@gmail.com References 1. http://en.wikipedia.org/wiki/Subset_sum_problem 2. http://stackoverflow.com/a/4633515/559456 ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
[Tutor] Configuring Emacs for Python development?
Okay. Since I first joined this list I have played around (as time permitted) with these editors/IDEs: PyCharm, Eclipse with PyDev, Notepad++, Emacs, IDLE, PyScripter, IdleX, Sublime Text, and possibly others. Of course, I have far from mastered any of them, but I think that I have a sense of what each is capable of plus an idea of their quirks/bugs. I have found that I do not entirely like any of them. I suppose that is normal. Of the above list I like Notepad++, PyCharm and Emacs the best. I have decided to eliminate Notepad++ due to it being tied entirely to Windows and that it does not have the power of Emacs. I liked PyCharm enough that when a special Earth Day sale came out, I purchased a license for it. Eventually, I think that I will gravitate to this if I start creating truly large projects, but I cannot use it at work. And it seems to be overkill for just beginning in Python. And I don't like the idea of creating a project for what amounts to one-off scripts. So I am led to Emacs. I like the ability to keep my fingers on the keyboard for almost everything I might want to do. And PyCharm has an ever-improving Emacs keybinding mode for when I do start using it. It SHOULD be available at work on the two Solaris 10 systems I do most of my work on, but I found out today that while the binary for Emacs exists on both systems, not all of the dependencies are installed. However, I am hoping to get permission to install a fresh, latest, greatest version of Emacs on these systems, but even if I don't Googling has revealed that Emacs can edit remote files via something called Tramp. So it looks like I could install Emacs on my Windows PC at work and edit from there. Likewise at home I am on Windows 7-64 bit Pro and have already installed GNU Emacs 24.3. When I last mentioned Emacs there was at least one offer to help me optimally configure Emacs for Python development on Windows. I am currently using version 3.3. This does not appear straightforward to me. When I Google for this topic, people have taken different approaches and I do not have the background or experience to judge which would work best for me. Additionally this latest version of Emacs apparently has made some improvements to the Python.el mode and it is not clear to me what suggestions will or will not work with this. Anyone care to help me with this? As always, thanks! boB ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
[Tutor] nose error
I'm trying a nose test on a simple prog. Once I got past the huge traceback in Wing that made me think nose didn't work I realized the prog tested okay. But I noticed at the end of the traceback nose says this: c:\Python27\Lib\site-packages\nose-1.3.0-py2.7.egg\nose\core.py, line 200, in runTests sys.exit(not self.success) SystemExit: False As i said, nose works and says Okay on the asserts (or not if I give things a bad value). I was just wondering what they SystemExit: False meant, or is that standard? Jim When I got to high school I realized my name would always present problems. --Dick Hertz ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
[Tutor] still nosing around
Okay, why is nose saying this run is OK when I purposely screwed it up? import nose def stand_and_deliver(): return 52 def stupid_error(): '''This is my stupid error''' assert stand_and_deliver() == 17 if __name__ == '__main__': nose.runmodule() nose result: Ran 0 tests in 0.000s OK -- Jim Mooney When I got to high school I realized my name would always present problems. --Dick Hertz ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] still nosing around
On 22/05/2013 01:25, Jim Mooney wrote: Okay, why is nose saying this run is OK when I purposely screwed it up? import nose def stand_and_deliver(): return 52 def stupid_error(): '''This is my stupid error''' assert stand_and_deliver() == 17 if __name__ == '__main__': nose.runmodule() nose result: Ran 0 tests in 0.000s OK Do you ever bother to investigate anything before posing a question? I know nothing about nose, but when I see output telling me that precisely nothing has been run, I'd hazard a guess that stupid_error has to be called test_stupid_error or similar. I'll leave you to check the nose docs to confirm whether or not my guess is correct. -- If you're using GoogleCrap™ please read this http://wiki.python.org/moin/GoogleGroupsPython. Mark Lawrence ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] still nosing around
On 22/05/13 10:25, Jim Mooney wrote: Okay, why is nose saying this run is OK when I purposely screwed it up? import nose def stand_and_deliver(): return 52 def stupid_error(): '''This is my stupid error''' assert stand_and_deliver() == 17 if __name__ == '__main__': nose.runmodule() nose result: Ran 0 tests in 0.000s OK Ran 0 tests -- does that give you a clue? Nose is not running any tests. I have never used nose, so I don't know how you write tests for it, but whatever you are supposed to do, you haven't done it. Let's see what Google has to say... this looks promising. http://nose.readthedocs.org/en/latest/testing.html As far as I can tell from about 30 seconds reading that page, your tests have to inherit from unittest.TestCase, or they have to be in a function, class or module called TestMatch. (There must be something useful about nose, but frankly I don't see the benefit of running it instead of just using unittest directly.) Personally, I recommend you start with doctests rather than nose or unittest. Change your module to this: === cut === def stand_and_deliver(): Always returns 52. stand_and_deliver() 52 return 52 def stupid_error(): This is my stupid error. stupid_error() 17 return stand_and_deliver() + 1000 if __name__ == '__main__': import doctest failed, run = doctest.testmod() if failed == 0: print(Successfully ran %d doc tests. % run) === cut === Run that file, and you should get 1 failed test out of 2, and a description of how it failed. -- Steven ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] nose error
On Tue, May 21, 2013 at 8:09 PM, Jim Mooney cybervigila...@gmail.com wrote: c:\Python27\Lib\site-packages\nose-1.3.0-py2.7.egg\nose\core.py, line 200, in runTests sys.exit(not self.success) SystemExit: False As i said, nose works and says Okay on the asserts (or not if I give things a bad value). I was just wondering what they SystemExit: False meant, or is that standard? Python's bool type is a subclass of int, so the function that handles system exit converts False to 0. In terms of process exit codes, 0 means success. On Windows the exit code is set in errorlevel: raise SystemExit(False) C:\echo %errorlevel% 0 raise SystemExit(True) C:\if errorlevel 1 echo spam spam ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] still nosing around
On 22/05/13 10:50, Mark Lawrence wrote: Do you ever bother to investigate anything before posing a question? That's rather harsh. The OP is doing a fine job at investigating new tools, and he's far more adventurous than I was at his level of expertise. (Or now, for that matter...) I think we can forgive him the occasional whoops moment. -- Steven ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] Tutor Digest, Vol 111, Issue 72
Do you ever bother to investigate anything before posing a question? Actually, I did notice that tests were zero, but the book I am using does not mention needing the word 'test' as part of the regex. There is only so much time in a day and so many books I can buy (and not all comprehensive, apparently.) That is why this list is an excellent ancillary to save me time. Otherwise, learning Py will take me a lot more time than I can budget. I'm not reading all the docs right now - which I used to and may in the future - because I'm trying a different method of just running a lot of progs to get up to speed. I figure once I grok the language, docs will be a lot easier. There is a certain logic to every language so you can anticipate what is right, but I'm not there yet. But that brings up a point. Does this mean that if I have to test a module with a lot of subroutines I have to rename every subroutine with 'test' appended? Try replying with a bit less emotion ;') Jim ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
[Tutor] challenge-chapter 2
I am on chapter two for Python Programming working on the challenges and the question is: 1. Create a list of legal and illegal variable names. Describe why each is either legal or illegal. Next, create a list of good and bad legal variable names. Describe why each is either a good or bad choice for a variable name. Can you help me solve this problem? ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
[Tutor] try..except - what about that ton of **Error statements?
I'm looking at Try..Except Try: some statements Except SomethingError as err: other statements The list of error statements is huge. How do I know which error statement to put in place of SomethingError (or multiple errors for that matter)? Or is it best to just leave SomethingError blank until I know more? ( I have an asymptotic learning curve, so I go off on a lot of confused tangents, but I find it makes things go a lot faster after a certain point.) -- Jim Mooney When I got to high school I realized my name would always present problems. --Dick Hertz ___ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor