Last change
on this file since 1359 was 1310, checked in by wouter, 2 weeks ago |
#407 added removeAll and remove to iterator - python does not have this functionality
|
File size:
1.1 KB
|
Rev | Line | |
---|
[667] | 1 |
|
---|
| 2 |
|
---|
| 3 | from collections.abc import Iterator
|
---|
| 4 | from itertools import tee
|
---|
[1310] | 5 | from typing import Tuple, TypeVar, Collection, Any, List
|
---|
[667] | 6 |
|
---|
| 7 | def hasNext(it)->Tuple[bool, Iterator]:
|
---|
| 8 | '''
|
---|
| 9 | A support function to test hasNext for standard python iterators.
|
---|
| 10 | usage, assuming it is already created (eg it=iter([1,2,3]):
|
---|
| 11 | nx, it = hasNext(it)
|
---|
| 12 |
|
---|
| 13 | After the call, nx will be True iff it has a next value.
|
---|
| 14 | The new it will be in original state (we have to damage the original iterator)
|
---|
| 15 | '''
|
---|
| 16 |
|
---|
| 17 | it,it1=tee(it)
|
---|
| 18 | try:
|
---|
| 19 | next(it1)
|
---|
| 20 | return True, it
|
---|
| 21 | except:
|
---|
| 22 | return False, it
|
---|
[1310] | 23 |
|
---|
| 24 | T=TypeVar("T")
|
---|
| 25 | def remove(lst:List[T], it: Any) -> bool:
|
---|
| 26 | '''
|
---|
| 27 | remove all occurences of it from lst
|
---|
| 28 | @param lst a list to remove items from
|
---|
| 29 | @param it an item to remove
|
---|
| 30 | @return True if lst was modified
|
---|
[1169] | 31 |
|
---|
[1310] | 32 | '''
|
---|
| 33 | n=lst.count(it)
|
---|
| 34 | for i in range(n):
|
---|
| 35 | lst.remove(it)
|
---|
| 36 | return n>0
|
---|
| 37 |
|
---|
| 38 | def removeAll(lst:List[T], toremove:Collection[Any]) -> bool:
|
---|
| 39 | '''
|
---|
| 40 | all items in toremove are removed from lst
|
---|
| 41 | @param lst a list to remove items from
|
---|
| 42 | @param toremove a list of items to remove
|
---|
| 43 | @return True if lst was modified
|
---|
| 44 | '''
|
---|
| 45 | return any([remove(lst,it) for it in toremove])
|
---|
| 46 |
|
---|
Note:
See
TracBrowser
for help on using the repository browser.