Python Forum

Full Version: Even/Odd permutation
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi,

can somebody please help me how to write function for checking is permutation odd or even.
Here is example of even permutation: [0,3,2,4,5,6,7,1,9,8]

I don't do python at all, but i need this thing...
Thank you.

P.S.
I guess this is 3 sec for somebody who knows what he does :)
We don't write code for you, but we are glad to help with code that you have written.
Make an attempt and show what you've got.
Sorry, I didn't want you to think that way.

I guess I can write it in PHP, but can you please translate it to python after? :)
(Jul-17-2018, 06:08 PM)braankoo Wrote: [ -> ]I guess I can write it in PHP, but can you please translate it to python after?
well, no...
post your python code in python tags, any traceback in error tags and ask specific questions.
def is_even(p):
  i = 0
  count = 0
  while(i < len(p)):
    k = i + 1
    while(k < len(p)):
      if(p[i] > p[k]):
        count+=1
      k+=1
    i+=1
  if(count == 0):
    return True
  if(count % 2 == 0):
    return True
  else:
    return False
Here is some solution. Could it be done better? Yes.
:)

This is my first code in python ever, so I was kind of 'scared'.
Good work.
Just one note, indentation should be 4 spaces. This is a coding style described in PEP8: https://www.python.org/dev/peps/pep-0008/?#indentation
(Jul-18-2018, 12:11 AM)braankoo Wrote: [ -> ]Could it be done better?
yes. it works, but is heavily influenced by your experience with other languages.
for example we don't use indexes to iterate over elements in a sequence. We reference the elements. And use enumerate if the index is needed too. So something more pythonic would be

def is_even(sequence):
    my_count = 0
    for i, num in enumerate(sequence, start=1):
        my_count += sum(num>num2 for num2 in sequence[i:]) 
    return not my_count % 2
Thank you !
(Jul-18-2018, 06:44 AM)buran Wrote: [ -> ]
(Jul-18-2018, 12:11 AM)braankoo Wrote: [ -> ]Could it be done better?
yes. it works, but is heavily influenced by your experience with other languages.
for example we don't use indexes to iterate over elements in a sequence. We reference the elements. And use enumerate if the index is needed too. So something more pythonic would be

def is_even(sequence):
    my_count = 0
    for i, num in enumerate(sequence, start=1):
        my_count += sum(num>num2 for num2 in sequence[i:]) 
    return not my_count % 2

This was interesting, understanding the enumerate was very helpful, can you please walkthrough was the += sum(num>num2 for num2 line is doing?
Please don't reply to 2.5 year old threads.