0

So this is supposed to be a sorting program, but for some reason, it is not sorting the file I'm giving, but just giving me straight numbers as it is. Any help would be appreciated. Thank you

filename=input('Enter file path:')
file = open(filename, 'r')
alist = [(line) for line in file.readlines()]
print(alist)

def selectionSort(alist):
    for index in range(0, len(alist)):
        ismall = index
        for i in range(index,len(alist)):
            if alist[ismall] > alist[i]:
                ismall = i
        alist[index], alist[ismall] = alist[ismall], alist[index]
    return alist 
4
  • Why do you wrap a list comprehension around readlines, which already gives you a list? Commented Mar 2, 2014 at 1:29
  • What's with all these SelectionSort questions today? This is very similar to stackoverflow.com/questions/22121364/python-selection-sort/… Commented Mar 2, 2014 at 1:44
  • This function works fine for me in Python 3.3. It successfully sorts a text file with 9700 (partial) genetic codes. Commented Mar 2, 2014 at 1:57
  • lol it was the homework that's why @Nitish Commented Mar 2, 2014 at 2:37

2 Answers 2

1

You didn't call the function!

def selectionSort(alist):
    for index in range(0, len(alist)):
        ismall = index
        for i in range(index,len(alist)):
            if alist[ismall] > alist[i]:
                ismall = i
        alist[index], alist[ismall] = alist[ismall], alist[index]

filename=input('Enter file path:')
file = open(filename, 'r')
alist = file.readlines()

# Call the function!
selectionSort(alist)
print(alist)

You've told Python what selectionSort means, but you haven't told it to sort anything. You need to call selectionSort(alist) to actually perform the sort.

Also, the order you want the list to be sorted in is most likely not the order you're telling Python to sort it in. alist is a list of strings, so you're telling Python to use lexicographic comparison to order the list. If it's supposed to be treated as, say, integers, you need to convert the data to integers:

alist = [int(line) for line in file]

(Also, since selectionSort modifies the list it operates on, it's best not to return the list. If you return it, it gives the impression that it creates a new, sorted list.)

Sign up to request clarification or add additional context in comments.

8 Comments

it is giving me the same result, it doesn't sort from least to greatest
@user3369517: You're probably telling Python to compare things the wrong way. Answer expanded.
alist = [int(line) for line in file] i actually did try that before, but it didn't work because i added int there, i did again now, it is actually giving errors now, "invalid literal for int() with base 10: "
What's the actual data? Can you show the data you're trying to sort?
[45, 7, 5, 25, 24, 1] just that for now
|
0

You have simply defined a method. You need to call it from somewhere. I added to your code and tested it. It works. Here you go: The last two lines actually make a call to the code you created: (be careful about indentation)

alist = [42,54,2,45,6,125,32]
print(alist)

def selectionSort(alist):
    for index in range(0, len(alist)):
        ismall = index
        for i in range(index,len(alist)):
            if alist[ismall] > alist[i]:
                ismall = i
        alist[index], alist[ismall] = alist[ismall], alist[index]
    return alist

newList = selectionSort(alist)
print newList

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.