Re: Human-powered sorting [Python]

I did this before.

[Reinventing the Wheel] Human Power Tournament Sort [Python]

It was fun to think and verify the algorithm, but it became so ridiculous that I'll include a smart way to just change the sort call function.

__ References: __ entertainment-lab: Implementation of original sorting in Python:

Whole code

Since the essential sort part is left to the genuine Python sort, it is naturally very short.

ranking_sort.py


#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# written by ssh0, December 2014.

description = """
Ranking interface for self-analysis.
In this application
Create a comparative question based on the given list
The ranking is completed when the user answers it.
              """

import argparse
import sys

def human_cmp(a, b):
    print '\nwhich ones do you like?'
    print '  [j]: %s, [k]: %s. [=]:eq' % (a, b)
    key_input = raw_input(">>> ")
    if key_input == 'j':
        ans = -1
    elif key_input == 'k':
        ans = 1
    elif key_input == '=':
        ans = 0
    else:
        raise ValueError('please select by "j", "k" or "=".')
    return ans


if __name__ == '__main__':

    parse = argparse.ArgumentParser(description=description)
    parse.add_argument('-l', '--list',
                       dest='objects',
                       nargs='*',
                       type=str,
                       help='list of some objects',
                       default=argparse.SUPPRESS
                       )
    args = parse.parse_args()
    data = args.objects
    data.sort(cmp=human_cmp)
    print data

The function passed to the sort function is human_cmp. Only be careful about the value returned by the function. Compare the two arguments and return a negative value if the first argument is smaller than the second argument, 0 if they are the same, and a positive value if they are larger.

Execution example

➤ python ranking_sort.py -l 3 1 4 8 5 2 6 7

which ones do you like?
  [j]: 1, [k]: 3. [=]:eq
>>> j

which ones do you like?
  [j]: 4, [k]: 1. [=]:eq
>>> k

which ones do you like?
  [j]: 4, [k]: 3. [=]:eq
>>> k

which ones do you like?
  [j]: 8, [k]: 3. [=]:eq
>>> k

which ones do you like?
  [j]: 8, [k]: 4. [=]:eq
>>> k

which ones do you like?
  [j]: 5, [k]: 4. [=]:eq
>>> k

which ones do you like?
  [j]: 5, [k]: 8. [=]:eq
>>> j

which ones do you like?
  [j]: 2, [k]: 4. [=]:eq
>>> j

which ones do you like?
  [j]: 2, [k]: 3. [=]:eq
>>> j

which ones do you like?
  [j]: 2, [k]: 1. [=]:eq
>>> k

which ones do you like?
  [j]: 6, [k]: 4. [=]:eq
>>> k

which ones do you like?
  [j]: 6, [k]: 8. [=]:eq
>>> j

which ones do you like?
  [j]: 6, [k]: 5. [=]:eq
>>> k

which ones do you like?
  [j]: 7, [k]: 4. [=]:eq
>>> k

which ones do you like?
  [j]: 7, [k]: 6. [=]:eq
>>> k

which ones do you like?
  [j]: 7, [k]: 8. [=]:eq
>>> j
['1', '2', '3', '4', '5', '6', '7', '8']

This is human power, but of course you can define some function yourself like a reference source.

Afterword

The last time was ... It was good because it was fun. I have no choice but to say so ... Or rather, it wasn't necessary to write it when I noticed it.

Recommended Posts

Re: Human-powered sorting [Python]
[Python] Sorting Numpy data
Sorting image files with Python (2)
Sorting image files with Python (3)
Techniques for sorting in Python
Sorting image files with Python
Python
Sorting algorithm and implementation in Python
Ruby Python Java Case insensitive sorting
Implementation of original sorting in Python
Sorting files by Python naming convention
Algorithm learned with Python 19th: Sorting (heapsort)
[Python] Sorting collection types as a reference
[Reinventing the wheel] Human-powered tournament sort [Python]