mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 03:20:18 +00:00
impl sort(key)
This commit is contained in:
parent
a421377116
commit
0bd413b337
@ -56,17 +56,23 @@ def filter(f, iterable):
|
||||
yield i
|
||||
|
||||
def zip(a, b):
|
||||
for i in range(min(len(a), len(b))):
|
||||
yield (a[i], b[i])
|
||||
a = iter(a)
|
||||
b = iter(b)
|
||||
while True:
|
||||
ai = next(a)
|
||||
bi = next(b)
|
||||
if ai is StopIteration or bi is StopIteration:
|
||||
break
|
||||
yield ai, bi
|
||||
|
||||
def reversed(iterable):
|
||||
a = list(iterable)
|
||||
a.reverse()
|
||||
return a
|
||||
|
||||
def sorted(iterable, reverse=False):
|
||||
def sorted(iterable, reverse=False, key=None):
|
||||
a = list(iterable)
|
||||
a.sort(reverse=reverse)
|
||||
a.sort(reverse=reverse, key=key)
|
||||
return a
|
||||
|
||||
##### str #####
|
||||
@ -110,22 +116,25 @@ tuple.__repr__ = lambda self: '(' + ', '.join([repr(i) for i in self]) + ')'
|
||||
list.__json__ = lambda self: '[' + ', '.join([i.__json__() for i in self]) + ']'
|
||||
tuple.__json__ = lambda self: '[' + ', '.join([i.__json__() for i in self]) + ']'
|
||||
|
||||
def __qsort(a: list, L: int, R: int):
|
||||
def __qsort(a: list, L: int, R: int, key):
|
||||
if L >= R: return;
|
||||
mid = a[(R+L)//2];
|
||||
mid = key(mid)
|
||||
i, j = L, R
|
||||
while i<=j:
|
||||
while a[i]<mid: i+=1
|
||||
while a[j]>mid: j-=1
|
||||
while key(a[i])<mid: i+=1
|
||||
while key(a[j])>mid: j-=1
|
||||
if i<=j:
|
||||
a[i], a[j] = a[j], a[i]
|
||||
i+=1
|
||||
j-=1
|
||||
__qsort(a, L, j)
|
||||
__qsort(a, i, R)
|
||||
__qsort(a, L, j, key)
|
||||
__qsort(a, i, R, key)
|
||||
|
||||
def list@sort(self, reverse=False):
|
||||
__qsort(self, 0, len(self)-1)
|
||||
def list@sort(self, reverse=False, key=None):
|
||||
if key is None:
|
||||
key = lambda x:x
|
||||
__qsort(self, 0, len(self)-1, key)
|
||||
if reverse:
|
||||
self.reverse()
|
||||
|
||||
|
@ -69,7 +69,7 @@ public:
|
||||
need_more_lines = 0;
|
||||
line = buffer;
|
||||
buffer.clear();
|
||||
mode = EXEC_MODE;
|
||||
mode = CELL_MODE;
|
||||
}else{
|
||||
return true;
|
||||
}
|
||||
|
@ -62,4 +62,16 @@ l.insert(0, 'h')
|
||||
l.insert(3, 'o')
|
||||
l.insert(1, 'e')
|
||||
assert l == ['h', 'e', 'l', 'l', 'o']
|
||||
assert l[-2] == 'l'
|
||||
assert l[-2] == 'l'
|
||||
|
||||
# test sort
|
||||
a = [8, 2, 4, 2, 9]
|
||||
assert sorted(a) == [2, 2, 4, 8, 9]
|
||||
assert sorted(a, reverse=True) == [9, 8, 4, 2, 2]
|
||||
|
||||
assert sorted(a, key=lambda x:-x, reverse=True) == [2, 2, 4, 8, 9]
|
||||
assert a == [8, 2, 4, 2, 9]
|
||||
|
||||
b = [(1, 2), (3, 3), (5, 1)]
|
||||
b.sort(key=lambda x:x[1])
|
||||
assert b == [(5, 1), (1, 2), (3,3)]
|
Loading…
x
Reference in New Issue
Block a user