Skip to main content
Code Review

Return to Answer

replaced http://codereview.stackexchange.com/ with https://codereview.stackexchange.com/
Source Link

Lastor already said what I was going to point out so I am not going to repeat that. I'll just add some other things.

I tried timing your solution with a bunch of other solutions I came up with. Among these the one with best time-memory combination should be the function mysort3 as it gave me best timing in nearly all cases. I am still looking about proper timing proper timing in Python. You can try putting in different test cases in the function tests to test the timing for yourself.

def mysort(words):
 mylist1 = sorted([i for i in words if i[:1] == "s"])
 mylist2 = sorted([i for i in words if i[:1] != "s"])
 list = mylist1 + mylist2
 return list
def mysort3(words):
 ans = []
 p = ans.append
 q = words.remove
 words.sort()
 for i in words[:]:
 if i[0] == 's':
 p(i)
 q(i)
 return ans + words
def mysort4(words):
 ans1 = []
 ans2 = []
 p = ans1.append
 q = ans2.append
 for i in words:
 if i[0] == 's':
 p(i)
 else:
 q(i)
 ans1.sort()
 ans2.sort()
 return ans1 + ans2
def mysort6(words):
 return ( sorted([i for i in words if i[:1] == "s"]) +
 sorted([i for i in words if i[:1] != "s"])
 )
if __name__ == "__main__":
 from timeit import Timer
 def test(f):
 f(['a','b','c','abcd','s','se', 'ee', 'as'])
 print Timer(lambda: test(mysort)).timeit(number = 10000)
 print Timer(lambda: test(mysort3)).timeit(number = 10000)
 print Timer(lambda: test(mysort4)).timeit(number = 10000)
 print Timer(lambda: test(mysort6)).timeit(number = 10000)

Lastor already said what I was going to point out so I am not going to repeat that. I'll just add some other things.

I tried timing your solution with a bunch of other solutions I came up with. Among these the one with best time-memory combination should be the function mysort3 as it gave me best timing in nearly all cases. I am still looking about proper timing in Python. You can try putting in different test cases in the function tests to test the timing for yourself.

def mysort(words):
 mylist1 = sorted([i for i in words if i[:1] == "s"])
 mylist2 = sorted([i for i in words if i[:1] != "s"])
 list = mylist1 + mylist2
 return list
def mysort3(words):
 ans = []
 p = ans.append
 q = words.remove
 words.sort()
 for i in words[:]:
 if i[0] == 's':
 p(i)
 q(i)
 return ans + words
def mysort4(words):
 ans1 = []
 ans2 = []
 p = ans1.append
 q = ans2.append
 for i in words:
 if i[0] == 's':
 p(i)
 else:
 q(i)
 ans1.sort()
 ans2.sort()
 return ans1 + ans2
def mysort6(words):
 return ( sorted([i for i in words if i[:1] == "s"]) +
 sorted([i for i in words if i[:1] != "s"])
 )
if __name__ == "__main__":
 from timeit import Timer
 def test(f):
 f(['a','b','c','abcd','s','se', 'ee', 'as'])
 print Timer(lambda: test(mysort)).timeit(number = 10000)
 print Timer(lambda: test(mysort3)).timeit(number = 10000)
 print Timer(lambda: test(mysort4)).timeit(number = 10000)
 print Timer(lambda: test(mysort6)).timeit(number = 10000)

Lastor already said what I was going to point out so I am not going to repeat that. I'll just add some other things.

I tried timing your solution with a bunch of other solutions I came up with. Among these the one with best time-memory combination should be the function mysort3 as it gave me best timing in nearly all cases. I am still looking about proper timing in Python. You can try putting in different test cases in the function tests to test the timing for yourself.

def mysort(words):
 mylist1 = sorted([i for i in words if i[:1] == "s"])
 mylist2 = sorted([i for i in words if i[:1] != "s"])
 list = mylist1 + mylist2
 return list
def mysort3(words):
 ans = []
 p = ans.append
 q = words.remove
 words.sort()
 for i in words[:]:
 if i[0] == 's':
 p(i)
 q(i)
 return ans + words
def mysort4(words):
 ans1 = []
 ans2 = []
 p = ans1.append
 q = ans2.append
 for i in words:
 if i[0] == 's':
 p(i)
 else:
 q(i)
 ans1.sort()
 ans2.sort()
 return ans1 + ans2
def mysort6(words):
 return ( sorted([i for i in words if i[:1] == "s"]) +
 sorted([i for i in words if i[:1] != "s"])
 )
if __name__ == "__main__":
 from timeit import Timer
 def test(f):
 f(['a','b','c','abcd','s','se', 'ee', 'as'])
 print Timer(lambda: test(mysort)).timeit(number = 10000)
 print Timer(lambda: test(mysort3)).timeit(number = 10000)
 print Timer(lambda: test(mysort4)).timeit(number = 10000)
 print Timer(lambda: test(mysort6)).timeit(number = 10000)
Source Link
Aseem Bansal
  • 2.3k
  • 3
  • 22
  • 37

Lastor already said what I was going to point out so I am not going to repeat that. I'll just add some other things.

I tried timing your solution with a bunch of other solutions I came up with. Among these the one with best time-memory combination should be the function mysort3 as it gave me best timing in nearly all cases. I am still looking about proper timing in Python. You can try putting in different test cases in the function tests to test the timing for yourself.

def mysort(words):
 mylist1 = sorted([i for i in words if i[:1] == "s"])
 mylist2 = sorted([i for i in words if i[:1] != "s"])
 list = mylist1 + mylist2
 return list
def mysort3(words):
 ans = []
 p = ans.append
 q = words.remove
 words.sort()
 for i in words[:]:
 if i[0] == 's':
 p(i)
 q(i)
 return ans + words
def mysort4(words):
 ans1 = []
 ans2 = []
 p = ans1.append
 q = ans2.append
 for i in words:
 if i[0] == 's':
 p(i)
 else:
 q(i)
 ans1.sort()
 ans2.sort()
 return ans1 + ans2
def mysort6(words):
 return ( sorted([i for i in words if i[:1] == "s"]) +
 sorted([i for i in words if i[:1] != "s"])
 )
if __name__ == "__main__":
 from timeit import Timer
 def test(f):
 f(['a','b','c','abcd','s','se', 'ee', 'as'])
 print Timer(lambda: test(mysort)).timeit(number = 10000)
 print Timer(lambda: test(mysort3)).timeit(number = 10000)
 print Timer(lambda: test(mysort4)).timeit(number = 10000)
 print Timer(lambda: test(mysort6)).timeit(number = 10000)
lang-py

AltStyle によって変換されたページ (->オリジナル) /